Esecuzione di query di ricerca full-text in Amazon Neptune - Amazon Neptune

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Esecuzione di query di ricerca full-text in Amazon Neptune

In una query che include la ricerca full-text, Neptune tenta di eseguire le chiamate di ricerca full-text prima di altre parti della query. Questo riduce il numero di chiamate a OpenSearch e nella maggior parte dei casi migliora significativamente le prestazioni. Tuttavia, questa non è affatto una regola rigida. Esistono situazioni, ad esempio, in cui PatternNode o UnionNode può precedere una chiamata di ricerca full-text.

Si consideri la seguente query Gremlin su un database contenente 100.000 istanze di Person:

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

Se questa query fosse eseguita nell'ordine in cui vengono visualizzati i passaggi, verrebbero trasmesse 100.000 soluzioni a OpenSearch, causando centinaia di chiamate OpenSearch. In effetti, Neptune chiama prima OpenSearch e poi unisce i risultati con i risultati di Neptune. Nella maggior parte dei casi, questo è molto più veloce rispetto all'esecuzione della query nell'ordine originale.

È possibile impedire questo riordinamento dell'esecuzione del passaggio di query utilizzando l'hint di query noReordering:

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

In questo secondo caso, il passaggio .hasLabel viene eseguito per primo e il passaggio .has('name', 'Neptune#fts marcello~') per secondo.

Per un altro esempio, si consideri una query SPARQL sullo stesso tipo di dati:

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

Anche in questo caso, Neptune esegue prima la parte SERVICE della query, poi unisce i risultati con i dati relativi a Person. È possibile eliminare questo comportamento usando l'hint di query 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 . } }

Ancora una volta, nella seconda query le parti vengono eseguite nell'ordine in cui appaiono nella query.