Neptune 全文搜索参数 - Amazon Neptune
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

Neptune 全文搜索参数

Amazon Neptune 使用以下参数指定全文:OpenSearchGremlin 和 SPARQL 中的查询:

  • queryType— (必需) 的类型OpenSearch查询。(有关查询类型列表,请参阅OpenSearch文档)。Neptune 支持以下内容OpenSearch查询类型:

    • simple_query_string— 基于提供的查询字符串返回文档,使用具有有限但容错的 Lucene 语法的分析器。这是默认查询类型。

      此查询使用简单的语法来解析提供的查询字符串并将其拆分为基于特殊运算符的词条。然后,查询会在返回匹配文档之前独立分析每个词条。

      虽然其语法比 query_string 查询更有限,但 simple_query_string 查询不会返回无效语法的错误。相反,它忽略查询字符串的任何无效部分。

    • 比赛— 该matchquery 是执行全文搜索的标准查询,包括模糊匹配的选项。

    • 前缀— 返回在提供字段中包含特定前缀的文档。

    • 模糊— 如果文档包含与搜索词相似的词条(相似度用 Levenshtein 编辑距离衡量),则返回该文档。

      编辑距离是将一个词条转换为另一个词条所需的单字符更改数。这些更改可包括:

      • 更改一个字符(box 更改为 fox)。

      • 删除一个字符(black 更改为 lack)。

      • 插入一个字符(sic 更改为 sick)。

      • 转置两个相邻的字符(act 更改为 cat)。

      查找相似词条时,fuzzy 查询会在指定的编辑距离内为搜索词创建所有可能变体和扩展,然后返回每个变体的精确匹配。

    • 术语— 返回指定字段之一包含指定词条的精确匹配的文档。

      您可以使用 term 查询基于精确值(如价格、产品 ID 或用户名)查找文档。

      警告

      避免对文本字段使用 term 查询。默认情况下,OpenSearch作为分析的一部分,更改文本字段的值,这会使得很难找到文本字段值的精确匹配。

      要搜索文本字段值,请改用 match 查询。

    • query_string— 基于提供的查询字符串返回文档,使用具有严格语法(Lucene 语法)的分析器。

      此查询使用语法来解析和拆分基于运算符(如 AND 或 NOT)提供的查询字符串。然后,查询会在返回匹配文档之前独立分析每个拆分文本。

      您可以使用 query_string 查询创建复杂的搜索,其中包括通配符、跨多个字段的搜索等。虽然查询灵活多变,但它是严格的,如果查询字符串包含任何无效语法,则会返回错误。

      警告

      由于它对任何无效语法返回错误,因此我们不建议对搜索框使用 query_string 查询。

      如果您不需要支持查询语法,请考虑使用 match 查询。如果您需要查询语法的功能,请使用不太严格的 simple_query_string 查询。

  • field— 中的字段OpenSearch要对其进行搜索。只有在 queryType 允许它(如 simple_query_stringquery_string 那样)时才能省略此项,在这种情况下,搜索针对所有字段。在 Gremlin 中,这是隐式的。

    如果查询允许,则可以指定多个字段,如 simple_query_stringquery_string 查询。

  • query— (必需) 要运行的查询OpenSearch. 此字段的内容可能因 queryType 而异。不同的 queryType 接受不同的语法,如 Regexp。在 Gremlin 中,query 是隐式的。

  • maxResults— 要返回的最大结果数量。默认为index.max_result_window OpenSearch设置,该设置本身默认为 10,000。maxResults 参数可以指定小于该值的任意数字。

    重要

    如果你设置maxResults价值高于OpenSearch index.max_result_window值并尝试检索多于index.max_result_window结果,OpenSearch带有失败的Result window is too large错误消息。但是,Neptune 正常地处理这个问题,而不会传播错误。如果您试图提取的结果数超过 index.max_result_window 的值,请记住这一点。

  • minScore— 返回的搜索结果必须具有的最低分数。请参阅OpenSearch相关文档有关结果评分的说明。

  • batchSize— Neptune 始终分批处理提取数据(默认批处理大小为 100)。您可以使用此参数来优化性能。批处理大小不能超过index.max_result_window OpenSearch设置,该设置默认为 10,000。

  • sortBy— 一个可选参数,允许您对返回的结果进行排序OpenSearch请按以下操作之一:

    • 文档中的特定字符串字段–  

      例如,在 SPARQL 查询中,您可以指定:

      neptune-fts:config neptune-fts:sortBy foaf:name .

      在类似的 Gremlin 查询中,您可以指定:

      .withSideEffect('Neptune#fts.sortBy', 'name')
    • 特定的非字符串字段 (longdouble等)在文档中–  

      请注意,在非字符串字段上进行排序时,您需要追加.value转到字段名称以将其与字符串字段区分开来。

      例如,在 SPARQL 查询中,您可以指定:

      neptune-fts:config neptune-fts:sortBy foaf:name.value .

      在类似的 Gremlin 查询中,您可以指定:

      .withSideEffect('Neptune#fts.sortBy', 'name.value')
    • score— 按匹配得分排序(默认)。

      如果 sortOrder 参数存在但 sortBy 不存在,则 score 按照由 sortOrder 指定的顺序对结果进行排序。

    • id— 按 ID 排序,这意味着 SPARQL 主题 URI 或 Gremlin 顶点或边缘 ID。

      例如,在 SPARQL 查询中,您可以指定:

      neptune-fts:config neptune-fts:sortBy 'Neptune#fts.entity_id' .

      在类似的 Gremlin 查询中,您可以指定:

      .withSideEffect('Neptune#fts.sortBy', 'Neptune#fts.entity_id')
    • label— 按标签排序。

      例如,在 SPARQL 查询中,您可以指定:

      neptune-fts:config neptune-fts:sortBy 'Neptune#fts.entity_type' .

      在类似的 Gremlin 查询中,您可以指定:

      .withSideEffect('Neptune#fts.sortBy', 'Neptune#fts.entity_type')
    • doc_type— 按文档类型(即 SPARQL 或 Gremlin)排序。

      例如,在 SPARQL 查询中,您可以指定:

      neptune-fts:config neptune-fts:sortBy 'Neptune#fts.document_type' .

      在类似的 Gremlin 查询中,您可以指定:

      .withSideEffect('Neptune#fts.sortBy', 'Neptune#fts.document_type')

    默认情况下,OpenSearch结果不进行排序,它们的顺序是不确定的,这意味着同一个查询在每次运行时都可能以不同的顺序返回项目。因此,如果结果集大于 max_result_window,则每次运行查询时都会返回总结果的一个非常不同的子集。但是,通过排序,您可以使不同运行的结果变得可更直接地进行比较。

    如果没有 sortOrder 参数随附 sortBy,则使用从最大到最小的降序 (DESC)。

  • sortOrder— 一个可选参数,允许您指定是否OpenSearch结果从最小到最大,或从最大到最小排序(默认):

    • ASC— 升序,从最小到最大。

    • DESC— 降序,从最大到最小。

      这是默认值,当 sortBy 参数存在但未指定 sortOrder 时使用。

    如果都不是sortBy也不sortOrder存在,OpenSearch默认情况下,结果不进行排序。