亚马逊海王星全文搜索 - 指定字段

6

所以SPARQL文档中包含了如何指定多个字段进行搜索的示例:

PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX neptune-fts: <http://aws.amazon.com/neptune/vocab/v01/services/fts#>
SELECT * WHERE {
  SERVICE neptune-fts:search {
    neptune-fts:config neptune-fts:endpoint 'http://your-es-endpoint.com' .
    neptune-fts:config neptune-fts:queryType 'query_string' .
    neptune-fts:config neptune-fts:query 'mikael~ OR rondelli' .
    neptune-fts:config neptune-fts:field foaf:name .
    neptune-fts:config neptune-fts:field foaf:surname .
    neptune-fts:config neptune-fts:return ?res .
  }
}

我正试图做同样的事情,但使用的是 Gremlin:

g.withSideEffect('Neptune#fts.endpoint', '...')
  .V().has(['name', 'company'], 'Neptune#fts term*')

这明显行不通。现在,我可以像这样使用通配符:
g.withSideEffect('Neptune#fts.endpoint', '...')
  .V().has('*', 'Neptune#fts term*')

现在我正在匹配所有字段,但由于我们的索引太多而失败了。(我想有一个1,024的限制。)

你有没有想过如何在Gremlin查询中指定要搜索的字段列表?

1个回答

6

同时,我找到了一个解决方法,虽然可行但不太干净:

您可以将查询设置为使用query_string格式,如下所示:

.withSideEffect("Neptune#fts.queryType", "query_string")

这将更加严格地检查语法,但意味着您可以在查询中搜索字段:

field1:foo AND field2:bar

现在,在 Neptune 中并不那么简单,因为您的字段名称不仅仅是field1field2,而是像这样格式化的:

predicates: {
  field1: {
    value: "..."
  },
  field2: {
    value: "..."
  }
}

没问题,您只需要修改查询内容:

predicates.field1.value:foo AND predicates.field2.value:bar

这里是我如何确保“某些字段匹配项匹配”的方法:

predicates.field1.value:<term> OR predicates.field2.value:<term>


2
嗨,那是正确的做法!我们将更新我们的文档以使这些信息可用。免责声明:我是领导FTS工作的Neptune开发人员。 - Simone Rondelli
@Vojto,请继续并将此标记为答案。 - The-Big-K

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接