Execução de consulta de pesquisa de texto completo no Amazon Neptune - Amazon Neptune

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Execução de consulta de pesquisa de texto completo no Amazon Neptune

Em uma consulta que inclua pesquisa de texto completo, o Neptune tenta colocar as chamadas de pesquisa de texto completo primeiro, antes de outras partes da consulta. Isso reduz o número de chamadas para o OpenSearch e, na maioria dos casos, melhora significativamente o desempenho. No entanto, essa não é de forma alguma uma regra rígida. Há situações, por exemplo, em que PatternNode ou UnionNode pode preceder uma chamada de pesquisa em texto completo.

Por exemplo, pense na seguinte consulta do Gremlin para um banco de dados que contenha cem mil instâncias de Person:

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

Se essa consulta fosse executada na ordem em que as etapas são exibidas, cem mil soluções fluiriam para o OpenSearch, causando centenas de chamadas do OpenSearch. Na verdade, o Neptune chama o OpenSearch primeiro e depois une os resultados aos resultados do Neptune. Na maioria dos casos, isso é muito mais rápido do que executar a consulta na ordem original.

É possível impedir essa reordenação da execução de etapas de consulta usando a dica de consulta noReordering :

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

Neste segundo caso, a etapa .hasLabel é executada primeiro e, logo depois, a etapa .has('name', 'Neptune#fts marcello~').

Para outro exemplo, considere uma consulta SPARQL em relação ao mesmo tipo de dados:

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

Aqui, novamente, o Neptune executa a parte SERVICE da consulta primeiro e depois une os resultados aos dados Person. É possível suprimir esse comportamento usando a dica 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 . } }

Novamente, na segunda consulta, as partes são executadas na ordem em que são exibidas na consulta.