BigData/ElasticSearch

Keyword Field를 활용하는 다양한 쿼리 예제

kih5893 2023. 3. 20. 23:36

본 내용은 윈도우에 설치된 Elasticsearch 7.10.2 버전으로 기준으로 작성되었습니다.

 

1. term query

term query는 정확한 매치를 찾기 위해 사용됩니다. 예를 들어, 특정 필드에서 "Elasticsearch"라는 값을 가지는 문서를 찾으려면 다음과 같이 사용할 수 있습니다.

GET http://localhost:9200/search_test_index/_search
{
  "query": {
    "term": {
      "keyword_field": {
        "value": "Elasticsearch"
      }
    }
  }
}

 

2. terms query

terms query는 주어진 terms 중 하나라도 매칭되는 모든 문서를 찾습니다. 예를 들어, "test1" 또는 "Elasticsearch"라는 값을 가지는 문서를 찾으려면 다음과 같이 사용할 수 있습니다.

GET http://localhost:9200/search_test_index/_search
{
  "query": {
    "terms": {
      "keyword_field": [
        "test1",
        "Elasticsearch"
      ]
    }
  }
}

 

3. exists query

exists query는 특정 필드가 존재하는 문서를 찾습니다. 모든 document가 같은 schema를 사용하지 않을 때 쓰일 수 있을 듯합니다.

GET http://localhost:9200/search_test_index/_search
{
  "query": {
    "exists": {
      "field": "keyword_field"
    }
  }
}

 

4. prefix query

prefix query는 주어진 prefix로 시작하는 term을 찾습니다. 예를 들어, "E"로 시작하는 값을 가지는 문서를 찾으려면 다음과 같이 사용할 수 있습니다.

GET http://localhost:9200/search_test_index/_search
{
  "query": {
    "prefix": {
      "keyword_field": {
        "value": "E"
      }
    }
  }
}

 

5. wildcard query

wildcard query는 주어진 와일드카드 패턴으로 매칭되는 term을 찾습니다. 예를 들어, "la"와 같은 패턴으로 매칭되는 값을 가지는 문서를 찾으려면 다음과 같이 사용할 수 있습니다.

GET http://localhost:9200/search_test_index/_search
{
  "query": {
    "wildcard": {
      "keyword_field": {
        "value": "*la*"
      }
    }
  }
}

 

6. regexp query

정규표현식(regular expression)으로 매칭되는 term을 찾습니다. 이때, 정규표현식 패턴을 사용하여 검색할 수 있습니다.

GET http://localhost:9200/search_test_index/_search
{
  "query": {
    "regexp": {
      "keyword_field": {
        "value": "E[ls]+ticsearch"
      }
    }
  }
}

 

7. fuzzy query

텀의 스펠링이나 철자가 약간 다른 경우에도 매칭되는 term을 찾습니다. fuzziness 파라미터를 이용하여 모호성(허용 가능한 오차 범위)을 지정할 수 있습니다.

GET http://localhost:9200/search_test_index/_search
{
  "query": {
    "fuzzy": {
      "keyword_field": {
        "value": "elasticserch",
        "fuzziness": 2
      }
    }
  }
}

 

8. bool query

여러 개의 다른 query를 조합하여 사용할 수 있습니다. must, must_not, should 파라미터를 사용하여 query를 조합할 수 있습니다.

GET http://localhost:9200/search_test_index/_search
{
  "query": {
    "bool": {
      "must": [
        { "match": { "text_field": "Elasticsearch" } },
        { "range": { "date_field": { "gte": "2022-03-01" } } }
      ],
      "must_not": [
        { "term": { "boolean_field": false } }
      ],
      "should": [
        { "term": { "integer_field": 10 } },
        { "term": { "integer_field": 42 } }
      ]
    }
  }
}

위 예시에서는 text_field에서 Elasticsearch가 포함되어 있고, date_field가 2022-03-01 이후인 document를 찾으며, boolean_field가 false가 아닌 document를 찾습니다. 그리고 integer_field가 10 또는 42인 document 중에 하나 이상을 찾습니다.

 

※ must: must에 포함되는 구문은 모두 포함되어야 하는 조건 (AND)
※ must_not: 모두 포함되면 안되는 조건 (NOT)
※ should: should 조건 중 1개 이상 만족하면 됨. (OR)

반응형