Elasticsearch Common Terms Query에 대해서 알아보기
쿼리의 모든 term에는 비용이 있습니다.
만약 “The brown fox”를 검색하려면 “the”, “brown”, “fox”로 검색을 하게 되며 “the”의 경우 많은 문서와 일치하므로 다른 두 용어보다 영향력이 적습니다.
이러한 경우에 예전에는 빈도가 높은 용어를 무시하는 것이었습니다. “the”를 stopword로 처리하여 인덱스크기를 줄이고 실행하는 term 쿼리의 수를 줄이는 것입니다.
이 방법의 문제점 stopwords가 관련성에는 미치는 영향이 적지만 중요한 부분도 존재합니다. stopword를 제거할 경우 정확도는 떨어지게됩니다.
예를 들어 “happy” 와 “not happy”를 구분할 수 없습니다.
common terms query는 query terms를 더 중요한 그룹, 덜 중요한 그룹으로 나뉩니다.
-
중요한 용어와 일치하는 문서를 검색합니다. 이는 검색으로 나온 결과 문서가 적을 수록 관련성에 더 큰 영향력을 준다는 말이 됩니다.
-
덜 중요한 용어(빈번하게 존재하며 낮은 관련성을 띄는 단어)에 대한 쿼리를 실행합니다. 그러나 모든 문서에 대한 관련성 점수를 계산하는 대신 첫번째 쿼리에서 이미 일치하는 문서의 _score 만 계산합니다.
이러한 방식으로 high frequency terms(많이 존재하는 단어?)에 대한 성능 저하 비용을 지불하지 않고도 관련도 계산을 향상시킬 수 있습니다.
만약 쿼리에 high frequency terms로만 이루어져 있다면 and 쿼리로 실행합니다.
Terms는 relative frequency(0.0 .. 1.0) 혹은 absolute frequency(>=1)로 지정할 수 있는 cutoff_frequency에 따라 높거나 낮은 빈도 그룹으로 할당됩니다.
example
$ curl "localhost:9200/sales-records/_search?pretty" -H "Content-Type:application/json" -d '
{
"query": {
"common": {
"country": {
"query": "Republic of",
"cutoff_frequency": 0.001,
"low_freq_operator": "and"
}
}
}
}'
참고사이트
- https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-common-terms-query.html
Enjoy Reading This Article?
Here are some more articles you might like to read next: