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

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

Full-text-search在 Amazon Neptune 中执行查询

在包含的查询中full-text-search,Neptune 试图把full-text-search首先在查询的其他部分之前调用。这减少了对的调用次数OpenSearch在大多数情况下显著提高了性能。但是,这绝不是hard-and-fast规则。例如,在某些情况下,PatternNode要么UnionNode可能在全文搜索调用之前。

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

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

如果此查询按步骤出现的顺序执行,则 10 万个解决方案将流入 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 . } }

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