2013-07-19 4 views
5

의 주문 나는 this question 읽은과 내 동료가 나를 의심했다 : 필터링 된 쿼리에 쿼리 - 실행

이 때 필터가 적용됩니까? 쿼리 실행 전후에? 결과가 언제 캐시됩니까?

필터를 미리 적용한 경우 필터에 쿼리 부분을 복제하는 것이 좋지 않습니까? 필터를 나중에 적용하면 캐시 된 내용을 이해하는 데 문제가 있습니다.

답변

9

다행히, ES 필터의 두 가지 유형을 제공합니다 : 첫 번째 경우

{ 
    "query" : { 
    "field" : { "title" : "Catch-22" } 
    }, 
    "filter" : { 
    "term" : { "year" : 1961 } 
    } 
} 


{ 
    "query": { 
    "filtered" : { 
     "query" : { 
     "field" : { "title" : "Catch-22" } 
     }, 
     "filter" : { 
     "term" : { "year" : 1961 } 
     } 
    } 
    } 
} 

, 필터는 쿼리에 의해 발견 된 모든 문서에 적용됩니다. 두 번째 경우에는 쿼리가 실행되기 전에 문서가 필터링됩니다. 이렇게하면 더 나은 성능을 얻을 수 있습니다. 에서 인용

: 캐시 소개 http://www.packtpub.com/elasticsearch-server-for-fast-scalable-flexible-search-solution/book

, 나는 필터의 캐시 메커니즘에 대한 확실하지 않다. 내 추측은 다음과 같습니다. 필터는 쿼리에서 반환 한 결과 집합에 대한 것이기 때문에 캐시는이 반환 집합에 대해 특정 종류입니다. 두 번째 경우에는 필터가 먼저 적용되고 확인한 인덱스에 대해 캐시가 저장되므로 쿼리 내용에 의존하지 않으므로이 캐시는 재사용이 가능하지만 첫 번째 메모리 비용과 쿼리 시간이 더 길기 때문에 (캐시가 생성되기 전의) 시간.

1

내가 당신 쿼리는 항상 당신이 검색하고자하는 기준의 완전한 문서 있다는 것입니다

우선을 execution- 검색 설명해 보자.

필터 쿼리가 검색 쿼리에 포함되어 있으면 해당 문서가 더 작아 지거나 필터 쿼리가 동일한 쿼리의 캐시 된 결과가됩니다. 이제 쿼리 텍스트로 검색 할 작은 트리가 있습니다.

필터에서 쿼리를 복제하면 캐시 메커니즘의 오버 헤드가 증가하고 필터 쿼리에 포함 할 내용과 무시할 대상에 대한 많은 가이드 라인이 있습니다. 그것은 모두 관련성이 있습니다. 당신이 작동하려면