home..

Udemy Elasticsearch - Query DSL

Elasticsearch Udemy 강의( Complete Guide to Elastticsearch )를 보면서 document에서 Query DSL 관련 내용을 정리한다.

Elasticsearch는 쿼리 정의에서 full Query DSL을 제공한다.Query DSL은 두 가지 유형의 clauses로 구성된다.

query clauses는 Query context, Filter context에 따라 다르게 적용된다.

Query / Filter context

https://www.elastic.co/guide/en/elasticsearch/reference/current/query-filter-context.html

Query context

query context에서 해당 document가 쿼리문과 얼마나 일치되는가에 초점을 맞춰 쿼리가 동작한다. document를 검색하는데 inverted index에 적용한 analysis가 동일하게 적용되어 normalize된다. 예를 들어 ‘Lobster’를 검색하며 소문자로 변환되어 ‘lobster’ 단어로 inverted index에서 검색하게 된다.

GET /products/_search
{
  "query": {
    "match": {
      "name": "Lobster"
    }
  }
}

Filter context

filter context에서는 쿼리문은 해당 문서가 쿼리문과 일치하는에 대한 답을 찾는 쿼리로 동작한다. 답은 boolean으로 True / False로, score를 계산하지 않는다. 또한, 자주 사용되는 필터는 자동으로 elasticseach에 캐싱된다. 예를 들어, ‘Lobster’로 검색하는 경우 analysis를 거치지 않으므로 정확히 일치하는 경우만 결과를 반환한다. 따라서 ‘Lobster’ / ‘lobster’로 요청하느냐 따라 결과가 달라진다.

GET /products/_search
{
  "query": {
    "term": {
      "name": "Lobster"
    }
  }
}

Query context & Filter context

search API에서 query context와 filter context를 사용하는 예시로,

GET /_search
{
  "query": {  # query context
    "bool": { 
      "must": [
        { "match": { "title":   "Search"        }}, # >> query context
        { "match": { "content": "Elasticsearch" }} # >> query context
      ],
      "filter": [ # filter context
        { "term":  { "status": "published" }}, # >> filter context
        { "range": { "publish_date": { "gte": "2015-01-01" }}} # >> filter context
      ]
    }
  }
}
© 2024 Yujin Lee   •  Powered by Soopr   •  Theme  Moonwalk