Request body search에서 모든 leaf query는 context가 존재하며, 이는 query context 또는 filter context로 나뉩니다.
- Query context : '이 document가 쿼리와 얼마나 잘 일치하는가?'에 대해 응답합니다. 일치하는 정도를 결정하는 것 외에도, 다른 document에 비해 document가 얼마나 잘 일치하는지를 나타내는 _score도 함께 계산합니다.
- Filter context : '이 document가 쿼리와 일치하는가?'에 대해 응답합니다. Query context의 결과물이 _score였다면, 여기서는 bool(true/false)이 결과물입니다. SQL에서의 WHERE 절과 유사하다고 볼 수 있습니다. '타임스탬프가 2015년과 2016년 사이의 범위인가?', '상태가 "published"인가?' 등과 같은 쿼리가 filter context에 속합니다. 자주 사용되는 필터는 성능을 높이기 위해 ElasticSearch에 의해 자동으로 캐싱됩니다.
아래는 query context와 filter context에 사용되는 쿼리의 예입니다.
위의 쿼리를 해석하면, 아래와 같습니다.
- "title"이 "Search"라는 단어를 포함하고,
- "content"가 "ElasticSearch"라는 단어를 포함하고 있어야 하며,
- "status"가 정확히 "published"이고,
- "publish_date"가 2015년 1월 1일과 같거나 그 미래여야 합니다.
위 두개의 쿼리는 query context에 속하고, 아래 두개의 쿼리는 filter context에 속합니다. 그리고 위 쿼리에서 사용한 bool, must, filter는 모두 compound query기 때문에 별도의 context가 없습니다.