Elasticsearch.05 검색과 쿼리

Elasticsearch 검색과 쿼리 - Query DSL

ElasticsearchRESTFul 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/_search

match

  • 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. lazydog 문자열을 사이에 1개 의 단어를 추가 허용하여 도큐먼트 검색
GET my_index/_search
{
  "query": {
    "match_phrase": {
      "message": {
        "query": "lazy dog",
        "slop": 1
      }
    }
  }
}

query_string

  • query_stringURL 검색에 사용되는 루씬의 검색 문법을 이용하고 있을 때 사용
  • 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\""
    }
  }
}

Bool Query


Relevancy


Bool: Should


Exact Value Query


Range Query


출처