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.