본문 바로가기
공부

Elasticsearch) Query DSL

by son_i 2023. 12. 8.
728x90

검색

수많은 데이터에서 조건에 부합하는 데이터만 가져오는 행위

 

 

풀텍스트 쿼리 (Full Text Query)

match_alll

  별다른 조건없이 해당 인덱스의 모든 도큐먼트를 검색하는 쿼리. 검색 시 쿼리를 넣지 않으면 자동 match_all 

GET my_index/_search

 


match

  풀 텍스트 검색에 사용되는 가장 일반적인 쿼리

GET my_index/_search
{
  "query": {
    "match": {
      "message": "dog"
    }
  }
}

 

검색 결과의 default는 or 조건

GET my_index/_search
{
  "query": {
    "match": {
      "message": "quick dog"
    }
  }
}

이렇게 하면 quick or dog가 있는 모든 도큐먼트를 찾음.

 

검색 조건을 AND로 바꾸려면 operator 옵션을 넣어줘야함.

GET my_index/_search
{
  "query": {
    "match": {
      "message": {
        "query": "quick dog",
        "operator": "and"
    }
  }
}
}

 


match_pharse

  위의 예제는 quick or dog라는 단어를 하나라도 가져오는 거였고 "quick dog"라는 구문을 가져오고 싶으면

GET my_index/_search
{
  "query": {
    "match_phrase": {
      "message": "brown fox"
    }
  }
}

brown fox 구문을 가진 도큐먼트를 가져옴.(이때 대소문자는 구분하지 않는다.)

 

slop옵션 :  검색 구문 사이에 지정한 값만큼의 검색어가 추가되는 것을 허용.

 

  ex) 스키 장갑을 검색한다고 했을 때 그냥 match query를 하면 스키와 장갑이 들어간 모든 상품을 찾음.

  + operator and 조건을 주면 상품명에 스키 + 장갑이 동시에 들어있는 상품을 찾음.

  + 여기서 match_phrase로 조건을 주면 스키 장갑이 무조건 세트로 있는 상품만 찾음 -> 검색 결과가 제한적일 수 있음.

  스키 벙어리 장갑 , 스키 가죽 장갑 등은 나오지 않음. 이럴 때 slope 옵션을 줘서 검색이 될 수 있도록 함.

 

얼마나 옵션을 잘 사용하느냐에 따라 사용자에게 보여줄 검색결과를 유연하게 조작할 수 있음.

GET my_index/_search
{
  "query": {
    "match_phrase": {
      "message": {
        "query": "lazy dog",
        "slop": 1
      }
    }
  }
}

 


query_string

URL의 q파라미터를 이용해서 검색하는 것처럼 URL 검색에 사용하는 루씬의 검색문법을 Data Body 검색에 이용하고 싶을 때 query_string 쿼리를 사용할 수 있음.

 

GET my_index/_search
{
  "query": {
    "query_string": {
      "default_field": "message",
      "query": "(jumping AND lazy) OR \"quick dog\""
    }
  }
}

위의 코드의 동작은 message 필드에서 lazy와 jumping을 모두 포함하거나 또는 "quick dog" 구문을 포함하는 도큐먼트를 검색. match_phrase처럼 구문 검색을 할 때는 검색할 구문을 쌍따옴표(\")안에 넣어야함.

 

풀 텍스트 쿼리?
검색 결과에 _score 점수가 있어서 높은 순으로 정렬되어 나옴.
Relevancy(정확도) 가 높은 것 == 가장 사용자가 보고싶어하는 것과 관련이 높은 것을 먼저 가져오는 것 

정확도 관련 doc

https://esbook.kimjmin.net/05-search/5.3-relevancy

 

5.3 정확도 - Relevancy - Elastic 가이드북

앞의 검색에서는 값이 "The quick brown fox jumps over the quick dog" 인 도큐먼트가 텀 quick, dog 총 세개를 포함하고 있어 가장 점수가 높습니다. 포함하고 있는 텀이 증가할수록 아래 그래프와 같이 TF 값도

esbook.kimjmin.net

 

참조 

모든 내용은 아래 가이드 북에서 참고해 공부한 내용...

큰 도움 받았습니다. . . . 

https://esbook.kimjmin.net/05-search