Full-text-searchexécution de requêtes dans Amazon Neptune - Amazon Neptune

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Full-text-searchexécution de requêtes dans Amazon Neptune

Dans une requête qui inclutfull-text-search, Neptune tente de mettre lefull-text-searchappelle en premier, avant d'autres parties de la requête. Cela réduit le nombre d'appels àOpenSearchet, dans la plupart des cas, améliore considérablement les performances. Cependant, il ne s'agit en aucun cas d'unhard-and-fastrègle. Il y a des situations, par exemple, où unPatternNodeouUnionNodepeut précéder un appel de recherche en texte intégral.

Prenez la requête Gremlin suivante vers une base de données contenant 100 000 instances dePerson :

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

Si cette requête était exécutée dans l'ordre dans lequel les étapes apparaissent, 100 000 solutions seraient acheminés versOpenSearch, provoquant des centaines deOpenSearchappels. En fait, Neptune appelleOpenSearchd'abord, puis joint les résultats avec les résultats Neptune. Dans la plupart des cas, cela est beaucoup plus rapide que l'exécution de la requête dans l'ordre d'origine.

Vous pouvez empêcher cette réorganisation de l'exécution de l'étape de requête à l'aide de l'indicateur de requête noReordering :

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

Dans ce second cas, l'étape .hasLabel est exécutée en premier et l'étape .has('name', 'Neptune#fts marcello~') en deuxième.

Pour un autre exemple, prenez une requête SPARQL par rapport au même type de données :

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

Encore une fois, Neptune exécute leSERVICEd'abord, puis joint les résultats avec l'Persondonnées. Vous pouvez supprimer ce comportement en utilisant l'Indice de requête 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 . } }

De nouveau, dans la deuxième requête, les parties sont exécutées dans l'ordre où elles apparaissent dans la requête.