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

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

Amazon Neptune 中的全文搜索查询执行

在包含全文搜索的查询中,Neptune 尝试首先将全文搜索调用放在查询的其他部分之前。这减少了对OpenSearch并且在大多数情况下显著提高了性能。然而,这绝不是一项硬和快速的规则。例如,在某些情况下,PatternNode或者UnionNode可能首先进行全文搜索调用。

假设对包含 10 万个实例的数据库进行以下 Gremlin 查询Person

g.withSideEffect('Neptune#fts.endpoint', 'your-es-endpoint-URL') .hasLabel('Person') .has('name', 'Neptune#fts marcello~');

如果此查询按步骤出现的顺序执行,则 10 万个解决方案将流入OpenSearch,导致数百个OpenSearch调用。事实上,Neptune 调用OpenSearch,然后将结果与 Neptune 结果联接起来。在大多数情况下,这比按原始顺序执行查询要快得多。

您可以使用 noReordering 查询提示防止查询步骤执行采用这种重新排序:

g.withSideEffect('Neptune#fts.endpoint', 'your-es-endpoint-URL') .withSideEffect('Neptune#noReordering', true) .hasLabel('Person') .has('name', 'Neptune#fts marcello~');

在第二种情况下,首先执行 .hasLabel 步骤,其次执行 .has('name', 'Neptune#fts marcello~') 步骤。

对于另一个示例,假设针对相同类型的数据进行 SPARQL 查询:

PREFIX foaf: <http://xmlns.com/foaf/0.1/> PREFIX neptune-fts: <http://aws.amazon.com/neptune/vocab/v01/services/fts#> SELECT ?person WHERE { ?person rdf:type foaf:Person . SERVICE neptune-fts:search { neptune-fts:config neptune-fts:endpoint 'http://your-es-endpoint.com' . neptune-fts:config neptune-fts:field foaf:name . neptune-fts:config neptune-fts:query 'mike' . neptune-fts:config neptune-fts:return ?person . } }

在这里,Neptune 再次执行SERVICE部分,然后将结果与Person数据。您可以使用joinOrder 查询提示

PREFIX foaf: <http://xmlns.com/foaf/0.1/> PREFIX neptune-fts: <http://aws.amazon.com/neptune/vocab/v01/services/fts#> PREFIX hint: <http://aws.amazon.com/neptune/vocab/v01/QueryHints#> SELECT ?person WHERE { hint:Query hint:joinOrder "Ordered" . ?person rdf:type foaf:Person . SERVICE neptune-fts:search { neptune-fts:config neptune-fts:endpoint 'http://your-es-endpoint.com' . neptune-fts:config neptune-fts:field foaf:name . neptune-fts:config neptune-fts:query 'mike' . neptune-fts:config neptune-fts:return ?person . } }

同样,在第二个查询中,查询的各个部分按照它们在查询中显示的顺序执行。