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 필드에 검색을 수행할 때 주로 사용합니다.
'DATA > ElasticSearch' 카테고리의 다른 글
[Line Music 발표영상 공부] 대규모 음악 데이터 검색 기능을 위한 Elasticsearch 구성 및 속도 개선 방법 (0) | 2023.08.05 |
---|---|
EFK 로그 수집 아키텍처 Elasricsearch + Fluentd + Opendashboard (0) | 2023.01.12 |
ElasticSearch Cluster와 Node (0) | 2023.01.08 |
엘라스틱서치 Elasticsearch ES 란? (0) | 2022.04.10 |
댓글