Ejecución de consultas de búsqueda de texto completo en Amazon Neptune - Amazon Neptune

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Ejecución de consultas de búsqueda de texto completo en Amazon Neptune

En una consulta que incluye búsqueda de texto completo, Neptune intenta poner primero las llamadas de búsqueda de texto completo, antes que otras partes de la consulta. Esto reduce el número de llamadas a OpenSearch y, en la mayoría de los casos, mejora significativamente el rendimiento. Sin embargo, esta no es de ninguna manera una regla estricta. Hay situaciones, por ejemplo, en las que PatternNode o UnionNode pueden preceder a una llamada de búsqueda de texto completo.

Analicemos la siguiente consulta de Gremlin a una base de datos que contiene 100 000 instancias de Person:

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

Si esta consulta se ejecutó en el orden en que aparecen los pasos, fluirán 100 000 soluciones a OpenSearch, lo que causará cientos de llamadas de OpenSearch. De hecho, Neptune llama primero a OpenSearch y, a continuación, une los resultados con los resultados de Neptune. En la mayoría de los casos, esto es mucho más rápido que ejecutar la consulta en el orden original.

Puede evitar este reordenamiento de la ejecución de pasos de la consulta utilizando la sugerencia de consulta noReordering:

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

En este segundo caso, se ejecuta primero el paso .hasLabel y después el paso .has('name', 'Neptune#fts marcello~').

Para ver otro ejemplo, considere una consulta SPARQL con el mismo tipo de datos:

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

De nuevo, aquí Neptune ejecuta primero la parte SERVICE de la consulta y, a continuación, une los resultados con los datos de Person. Puede suprimir este comportamiento utilizando la sugerencia de consulta 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 . } }

Nuevamente, en la segunda consulta las partes se ejecutan en el orden en que aparecen en la consulta.