오픈서치의 검색 기능을 알아보다가 fuzzy라는 걸 알게 되었다.
User
{
"query": {
"fuzzy": {
"g_name": {
"value": "체리",
"fuzziness": 1
}
}
}
}
이렇게 fuzzy를 사용하면 '체리', '칠레산 체리' 외에도 '채리' 등 유사한 단어가 포함되어도 검색에 걸리게 할 수 있다.
그래서 적용을 하려고 했는데...
fuzzy 검색은 성능에 영향을 줄 수 있는 몇 가지 요소가 있다. fuzzy 쿼리는 일반 match 쿼리보다 더 많은 계산을 필요로 하기 때문에 특히 큰 데이터셋이나 높은 트래픽을 처리하는 애플리케이션에서 성능 저하를 일으킬 수 있다고 함...
Fuzziness Level
fuzziness 매개변수는 검색어와 필드 값 사이의 허용되는 불일치 정도를 결정한다. fuzziness 값이 높을수록 더 많은 변형(variation)이 허용되어 검색어와 다소 다른 단어도 결과에 포함될 수 있다. 이는 계산량을 증가시켜 성능에 부정적인 영향을 미칠 수 있다.
인덱스 크기 및 구조
큰 인덱스나 분석이 복잡한 필드에서 fuzzy 쿼리를 수행하면, 검색에 필요한 시간이 늘어나 성능이 저하될 수 있다. 인덱스의 구조와 설정도 성능에 큰 영향을 미칠 수 있으므로, 검색 성능을 최적화하기 위해 적절한 인덱싱 전략을 사용하는 것이 중요함.
캐싱과 최적화
Elasticsearch 및 OpenSearch는 일반적으로 자주 조회되는 쿼리 결과를 캐시하여 빠르게 응답할 수 있도록 함!! 그러나 fuzzy 쿼리와 같은 복잡한 쿼리는 캐시 효율이 낮을 수 있으므로, 캐싱 전략을 신중하게 고려해야 한다.
그래서.... 우리는 fuzzy 대신
{
"query": {
"match": {
"g_name": "체리"
}
}
}
그냥 매치를 사용하기로 했음.