Ausführung einer Volltextsuchabfrage in Amazon Neptune - Amazon Neptune

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Ausführung einer Volltextsuchabfrage in Amazon Neptune

In einer Abfrage, die eine Volltextsuche enthält, versucht Neptune, die Volltextsuchaufrufe zuerst vor anderen Teilen der Abfrage durchzuführen. Dadurch wird die Anzahl der Aufrufe von OpenSearch reduziert und in den meisten Fällen die Leistung erheblich verbessert. Dies ist jedoch keineswegs eine feste Regel. Es gibt Situationen, in denen beispielsweise ein PatternNode oder UnionNode einem Volltextsuchaufruf vorausgehen kann.

Sehen Sie sich beispielsweise die folgende Gremlin-Datenbankabfrage an eine Datenbank an, die 100 000 Instances von Person enthält:

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

Würde diese Abfrage in der Reihenfolge ausgeführt werden, in der die Schritte erscheinen, würden 100 000 Lösungen in OpenSearch einfließen, was Hunderte von OpenSearch-Aufrufen verursachen würde. Tatsächlich ruft Neptune zuerst OpenSearch auf und verknüpft dann die Ergebnisse mit den Neptune-Ergebnissen. In den meisten Fällen erfolgt dies viel schneller als die Ausführung der Abfrage in der ursprünglichen Reihenfolge.

Sie können diese Neuordnung der Abfrageschrittausführung mit dem Abfragehinweis „noReordering“ verhindern:

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

In diesem zweiten Fall wird zuerst der Schritt .hasLabel und anschließend der Schritt .has('name', 'Neptune#fts marcello~') ausgeführt.

Ein weiteres Beispiel ist eine SPARQL-Abfrage für gleiche Art von Daten:

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 führt hier erneut zuerst den SERVICE-Teil der Abfrage aus und führt dann die Ergebnisse mit den Person-Daten zusammen. Sie können dieses Verhalten mit dem Abfragehinweis „joinOrder“ unterdrücken:

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 . } }

Auch in der zweiten Abfrage werden die Teile in der Reihenfolge ausgeführt, in der sie in der Abfrage erscheinen.