Amazon Neptune에서 전체 텍스트 검색 쿼리 실행 - Amazon Neptune

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

Amazon Neptune에서 전체 텍스트 검색 쿼리 실행

전체 텍스트 검색을 포함하는 쿼리에서 Neptune은 전체 텍스트 검색 호출을 쿼리의 다른 부분보다 앞에 두려고 시도합니다. 이렇게 하면 OpenSearch에 대한 호출 수가 줄어들어, 대부분의 경우에서 성능이 크게 향상됩니다. 그러나 이는 반드시 지켜야만 하는 엄격한 규칙이 아닙니다. 예를 들어, 전체 텍스트 검색 호출보다 PatternNode 또는 UnionNode가 먼저 오는 경우가 있습니다.

Person의 인스턴스가 100,000개 있는 데이터베이스에 대한 다음과 같은 Gremlin 쿼리를 생각해 봅니다.

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

단계가 나타나는 순서대로 이 쿼리가 실행되면 100,000개의 솔루션이 OpenSearch로 유입되어 수백 개의 OpenSearch 호출이 발생합니다. 실제로 Neptune은 OpenSearch를 먼저 호출한 후 결과를 Neptune 결과와 조인합니다. 대부분의 경우에서 이 작업은 원래 순서로 쿼리를 실행할 때보다 훨씬 빠릅니다.

noReordering 쿼리 힌트를 사용하여 이렇게 쿼리 단계 실행 순서가 변경되는 것을 방지할 수 있습니다.

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

이 두 번째 경우에는 .hasLabel단계가 먼저 실행되고 .has('name', 'Neptune#fts marcello~')단계가 두 번째로 실행됩니다.

이번에는 동일한 종류의 데이터에 대한 SPARQL 쿼리를 생각해보십시오.

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

이 경우에도 Neptune이 쿼리의 SERVICE 부분을 먼저 실행한 다음 결과를 Person 데이터와 조인합니다. 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 . } }

두 번째 쿼리에서도 해당 부분이 쿼리에 나타나는 순서대로 실행됩니다.