결국 무엇이든 해내는 사람

ElasticSearch - should와 score [ 예제, 설명 ] 본문

두서없는 공부 노트/ElasticSearch

ElasticSearch - should와 score [ 예제, 설명 ]

kkm8257 2021. 12. 13. 17:29
반응형

 

-- 샘플 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"}


-- bool 쿼리의 should는 검색 점수를 조정하기 위해 사용할 수 있다.


-- match 쿼리로 fox를 포함한 도큐먼트 검색
-- 아래 쿼리 사용시  "The quick brown fox jumps over the quick dog"가 최하위 점수
GET my_index/_search
{
  "query": {
    "match": {
      "message": "fox"
    }
  }
}


-- 검색 결과중 lazy가 포함된 결과에 가중치를 줘서 상위로 올려보기
-- should 안에 lazy를 찾는 검색 추가
-- 아래 쿼리 사용시 fox 만 포함하던 "The quick brown fox jumps over the quick dog"가
-- 최하위였다가 최상위로 올라왔음
GET my_index/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "message": "fox"
          }
        }
      ],
      "should": [
        {
          "match": {
            "message": "lazy"
          }
        }
      ]
    }
  }
}


-- 쇼핑몰 상품 검색과 같은 경우, 검색어가 하나라도 포함된 결과를 모두 가져오지만 작성한 검색어 자체와 정확히 일치하는 결과를 맨 상위에
-- 위치시킨다. 이런 경우 높은 품질의 결과를 제공가능
-- should와 match_phrase를 함께 사용
-- lazy 혹은 dog를 포함하는 document 를 찾는데, 결과물중 match_phrase쿼리를 수행하여, "lazy dog"라는 문자열을 포함한
-- 결과값이 가중치를 더 받는다. 스코어 점수를 높임
GET my_index/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "message": {
              "query": "lazy dog"
            }
          }
        }
      ],
      "should": [
        {
          "match_phrase": {
            "message": "lazy dog"
          }
        }
      ]
    }
  }
}
반응형
Comments