【问题标题】:Amazon Neptune Full Text Search - specify fieldsAmazon Neptune 全文搜索 - 指定字段
【发布时间】:2020-05-02 00:24:56
【问题描述】:

所以SPARQL documentation 包含如何指定要搜索的多个字段的示例:

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 查询中指定要搜索的字段列表吗?

【问题讨论】:

    标签: elasticsearch gremlin amazon-neptune


    【解决方案1】:

    同时我找到了一个解决方法,它可以工作但不是很干净:

    您可以将查询设置为使用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:&lt;term&gt; OR predicates.field2.value:&lt;term&gt;

    【讨论】:

    • 您好,这是正确的做法!我们将更新我们的文档以提供此信息。免责声明:我是负责 FTS 工作的 Neptune 开发人员。
    • @Vojto 请继续并将其标记为答案。
    猜你喜欢
    • 2021-01-12
    • 1970-01-01
    • 1970-01-01
    • 2015-02-24
    • 1970-01-01
    • 1970-01-01
    • 2021-03-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多