본문 바로가기
DATA/ElasticSearch

[ES] match vs term

by bzerome240 2024. 11. 6.

 

 

[ElasticSearch] match, term 쿼리 제대로 이해하기

ElasticSearch 에서 검색을 위한 가장 기본적인 쿼리 DSL 을 작성한다고 하면 대부분 match 쿼리나 term 쿼리를 베이스로 작성합니다. 기본적인 match, term 쿼리의 동작을 자세히 정리해봤습니다.

jaeyeong951.medium.com

 

 

match 와 term 쿼리 모두 특정 필드의 내용이 질의어와 일치하는 문서를 찾는데 사용합니다. 하지만 일치의 여부를 어떻게 찾는지에 대한 그 세부사항은 굉장히 다릅니다.

 

GET index_for_search/_search
{
"query": {
"match": {
"fieldForSearch": {
"query": "this is something"
}
}
}
}

 

질의어인 “this is something” 이라는 텍스트는 “this”, “is”, “something” 이라는 3개의 텀으로 분리되어 역색인 검색이 수행됩니다.

여기서 또 주의할점은 match 쿼리는 기본적으로 OR 로 동작한다는 겁니다. 이말인 즉슨, “this”, “is”, “something” 3개의 텀으로 검색을 수행한 후 셋 중 하나의 검색에서만 나온 문서라도 결과로 인정된다는 뜻입니다. 물론 아래처럼 operator 필드 값을 통해 동작을 AND 로 수정할 수도 있습니다.

 

GET index_for_search/_search
{
"query": {
"match": {
"fieldForSearch": {
"query": "this is something",
"operator": "and"
}
}
}
}

 

그리고 또 match 쿼리는 아래처럼 fuzziness 옵션을 통해 Fuzzy 검색(유사성 검색)도 수행할 수 있습니다.

내부적으로 Levenshtein distance 알고리즘을 사용해서 단어간 유사도를 측정합니다. 이 유사도를 어디까지 허용할건지 그 정도를 fuzziness 필드를 통해 조절합니다. 0,1,2 사이의 값으로 명확히 지정하거나 단어의 길이에 따라 유동적으로 조절하는 AUTO 옵션을 사용할 수 있습니다.

 

GET index_for_search/_search 
{
  "query": {
    "match": {
      "fieldForSearch": {
        "query": "this is something",
        "fuzziness": "AUTO"
      }
    }
  }
}

 

term

 

GET index_for_search/_search
{
"query": {
"term": {
"fieldForSearch": {
"value": "Hello"
}
}
}
}

 keyword 필드에 검색을 수행할 때 주로 사용합니다. 

728x90
반응형

댓글