결국 무엇이든 해내는 사람

ElasticSearch - bool 쿼리 [ 예제, 설명 ] 본문

두서없는 공부 노트/ElasticSearch

ElasticSearch - bool 쿼리 [ 예제, 설명 ]

kkm8257 2021. 12. 13. 16:49
반응형

 

 

-- 샘플 bulk
POST my_index/_bulk
{"index":{"_id":1}}
{"message":"The quick brown fox"}
{"index":{"_id":2}}
{"message":"The quick brown fox jumps over the lazy dog"}
{"index":{"_id":3}}
{"message":"The quick brown fox jumps over the quick dog"}
{"index":{"_id":4}}
{"message":"Brown fox brown dog"}
{"index":{"_id":5}}
{"message":"Lazy jumping dog"}


-- query_string 쿼리는 여러 조건을 조합하기에는 용이한 문법이지만 옵션이 한정
-- 여러 쿼리를 조합하기 위해서는 상위에 bool 쿼리를 사용하고 그안에 다른 쿼리를 넣는 방식 이용
-- bool 쿼리는 4개의 인자 존재, 해당 인자안에 다른 쿼리를 배열로 넣는 방식으로 동작

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

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




-- quick  과 "lazy dog" 검색
-- must값은 배열로 구성되어있음
GET my_index/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "message": "quick"
          }
        },
        {
          "match_phrase": {
            "message": "lazy dog"
          }
        }
      ]
    }
  }
}



-- quick 과 "lazy dog"가 포함되지 않은 문서 검색
GET my_index/_search
{
  "query": {
    "bool": {
      "must_not": [
        {
          "match": {
            "message": "quick"
          }
        },
        {
          "match_phrase": {
            "message": "lazy dog"
          }
        }
      ]
    }
  }
}


-- must와 should는 SQL의 AND와 OR 과 유사하지만 정확히 같지는 않다고함
-- must는 AND와 유사하게 동작하지만, should는 OR과 정확히 일치하지는 않음

-- ( A or B ) and ( not C ) 라는 쿼리를 만들고자하면

-- SQL :
        ( A or B ) and ( not C )

-- ES :
        must: [ { match "A B" } ]   //띄어쓰기는 OR
        must_not: [ { match C } ]

 

 

반응형
Comments