ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Elasticsearch] 엘라스틱서치 bool query 사용
    DB/Elasticsearch 2021. 6. 29. 18:33

    query_string 쿼리는 여러 조건을 조합하기에는 용이한 문법이지만 옵션이 한정되어 있다.

    여러 쿼리를 조합하기 위해서는 상위에 bool 쿼리를 사용하고 그 안에 다른 쿼리들을 넣는 식으로 사용 가능하다.

     

    bool 쿼리는 4개의 인자를 가지고 있고, 그 인자 안에 다른 쿼리들을 배열로 넣는 방식으로 동작한다.

     

     

    • must : 쿼리가 참인 도큐먼트들을 검색
    • must_not : 쿼리가 거짓인 도큐먼트들을 검색
    • should : 검색 결과 중 이 쿼리에 해당하는 도큐먼트의 점수를 높인다
    • filter : 쿼리가 참인 도큐먼트를 검색하지만 스코어를 계산하지 않는다. must 보다 검색 속도가 빠르고 캐싱이 가능.

     

    GET <인덱스명>/_search
    {
      "query": {
        "bool": {
          "must": [
            { <쿼리> }, …
          ],
          "must_not": [
            { <쿼리> }, …
          ],
          "should": [
            { <쿼리> }, …
          ],
          "filter": [
            { <쿼리> }, …
          ]
        }
      }
    }

     

    and 조건으로 검색하려면

    must 배열안에 여러개의 조건을 추가해야 한다.

     

    예를 들어 match 해당 기간동안 logDate의 로그에 어떤 text 를 가진 데이터 조회를 할 경우

    GET 인덱스/_search
    {
      "query": { 
        "bool": { 
          "must": [
            {
              "match": {
                  "text": "텍스트"
              }
            },
            { 
              "range": { 
                 "logDate": {
                      "gte": "2021-06-29 11:00:00.000",
                      "lte": "2021-06-29 12:00:00.000",
                      "format": "yyyy-MM-dd HH:mm:ss.SSS",
                      "time_zone": "+09:00"
                 }
              }
            }
          ]
        }
      }
    }

     

     

    or 조건으로 검색하려면 must : [{match :"A B"}] 와 같이 검색하자.

     

     

     

    참고문헌

    > https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-bool-query.html [bool 쿼리 공식문서]

    > https://esbook.kimjmin.net/05-search/5.2-bool [블로그 Elastic 가이드북]

    반응형

    'DB > Elasticsearch' 카테고리의 다른 글

    [ELK] logstash filter grok 사용  (0) 2022.12.18

    댓글

Designed by Tistory.