Elasticsearch의 DSL 쿼리 및 filter

27204 단어 elasticsearchfilterDSL
Elasticsearch의 DSL에는 두 가지 개념이 있는데 query와 filter는 ES의 검색 효율에 매우 영향을 미친다.
다음은 이 두 키워드의 구체적인 함수를 명확히 하겠습니다.
query context: 이 문서가 조회 문장과 어느 정도 일치하는지 대답합니다. (How well doesthis document match thisquery clause?),점수가 계산됩니다 _score.
filter context: 이 문서가 검색 문장과 일치하는지, 그렇지 않은지 대답합니다. (Doesthis document match thisquery clause?)점수를 계산할 줄 모른다.
일치 정도가 필요한 쿼리 (_score가 있는 경우) 를 제외하고query를 사용하고, 나머지 쿼리는 filter를 사용해야 합니다.(As a general rule, use query clauses for full-text search or for any condition that should affect the relevance score, and use filters for everything else.)
Filter의 결과는 ES에 캐시되어 효율을 높일 수 있습니다.
또한 필터는 분수와 정렬을 계산하지 않기 때문에query보다 속도가 빠릅니다.
다음 예는https://www.elastic.co/guide/en/elasticsearch/reference/current/query-filter-context.html
GET _search
{
  "query": { 
    "bool": { 
      "must": [
        { "match": { "title":   "Search"        }}, 
        { "match": { "content": "Elasticsearch" }}  
      ],
      "filter": [ 
        { "term":  { "status": "published" }}, 
        { "range": { "publish_date": { "gte": "2015-01-01" }}} 
      ]
    }
  }
}

The  query  parameter indicates query context.
 
The  bool  and two  match  clauses are used in query context, which means that they are used to score how well each document matches.
The  filter  parameter indicates filter context.
 
The  term  and  range  clauses are used in filter context. They will filter out documents which do not match, but they will not affect the score for matching documents.

좋은 웹페이지 즐겨찾기