Amazon Neptune でのフルテキスト検索クエリの実行 - Amazon Neptune

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Amazon Neptune でのフルテキスト検索クエリの実行

フルテキスト検索を含むクエリでは、Neptune は、フルテキスト検索呼び出しを、クエリの他の部分より前となる、最初に配置しようとします。これにより、OpenSearch への呼び出し回数が減り、ほとんどの場合、パフォーマンスが大幅に向上します。しかし、これは決して厳格なルールではありません。たとえば、次のような状況があります。PatternNode または UnionNode がフルテキスト検索コールの前に表示されることがあります。

次の Gremlin クエリを 100,000 個の Person インスタンスを含むデータベースに対して行うとします。

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

このクエリがステップが表示される順序で実行された場合、100,000 のソリューションが 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~');

この 2 番目のケースでは、.hasLabel ステップが最初に実行され、.has('name', 'Neptune#fts marcello~') ステップは 2 番目に実行されます。

別の例として、同じ種類のデータに対する 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 . } }

ここでも、2 番目のクエリでは、パーツはクエリに表示される順序で実行されます。