Elasticsearch 검색과 쿼리 - Query DSL
Elasticsearch 는 RESTFul API 를 지원하면서 다양한 검색 기능을 제공하고 있다.
검색 엔진 솔루션인 만큼 최적화된 검색 성능을 더불어 다양한 조건을 Query 질의 방식으로 검색할 수 있도록
검색 기능을 제공한다.
한번 Elasticsearch 의 검색 기능으로 어떻게 데이터를 검색할 수 있을지 간단히 살펴보고자 한다.
- Full Text Query
- Bool Query
- Relevancy
- Bool: Should
- Exact Value Query
- Range Query
Full Text Query
Full Text Query 풀-텍스트 쿼리는 Elasticsearch 검색에 사용되는 주요 Query 들을 의미한다.
- match_all
- match
- match_phrase
- query_string
match_all
- match_all은 특별한 검색 조건 없이 해당 인덱스의 모든 도큐먼트를 검색
GET my_index/_searchmatch
- match는 풀 텍스트 검색에 가장 일반적으로 사용되는- Query
- 검색하고자 하는 message필드에 있는 문자열을 포함한 모든 도큐먼트를 검색
- 여러 단어를 공백 기준으로 분리하여 입력하면 OR조건으로 검색
- operator필드를 함께 요청한다면,- AND조건으로 검색 가능
e.g. quick, dog 문자열을 OR 조건으로 각각 포함한 도큐먼트 검색
GET my_index/_search
{
  "query": {
    "match": {
      "message": "quick dog"
    }
  }
}e.g. quick, dog 문자열을 AND 조건으로 모두 포함한 도큐먼트 검색
GET my_index/_search
{
  "query": {
    "match": {
      "message": {
        "query": "quick dog",
        "operator": "and"
      }
    }
  }
}match_phrase
- match_phrase는 조건에 대한 정확한 문자열을 포함한 도큐먼트 검색
- slop필드를 함께 사용하면 정확한 문자열 사이의 다른 검색어를 추가 허용하는 조건으로 검색
e.g. lazy dog 문자열을 정확하게 포함한 도큐먼트 검색
GET my_index/_search
{
  "query": {
    "match_phrase": {
      "message": "lazy dog"
    }
  }
}e.g. lazy 와 dog 문자열을 사이에 1개 의 단어를 추가 허용하여 도큐먼트 검색
GET my_index/_search
{
  "query": {
    "match_phrase": {
      "message": {
        "query": "lazy dog",
        "slop": 1
      }
    }
  }
}query_string
- query_string은- URL검색에 사용되는 루씬의 검색 문법을 이용하고 있을 때 사용
- query_string사용하면 다양한 복합 조건을 설정하여 검색 가능
e.g. lazy & jumping 모두 포함하거나 quick dog 문자열을 포함한 도큐먼트 검색
GET my_index/_search
{
  "query": {
    "query_string": {
      "default_field": "message",
      "query": "(jumping AND lazy) OR \"quick dog\""
    }
  }
}