[Elasticsearch] WildcardQuery 알아보기
Elastic/Elasticsearch 2018. 4. 12. 15:46참고문서)
https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-wildcard-query.html
WildcardQuery 는 사실 추천 하지 않지만 필요에 따라 사용해야 할 수도 있습니다.
성능적으로 좋은 API 는 아니기 때문에 추천 하지 않는 것이지 기능적으로는 유용할 수도 있습니다.
[Field Type]
Keyword : not_analyzed
Text(String) : analyzed
[Lucene]
WildcardQuery -> MultiTermQuery
[Elasticsearch]
WildcardQueryBuilder
[Usage]
WildcardQuery 는 기본적으로 field type 의 색인 속성과는 상관 없습니다.
not_analyzed field 에 대해서 질의 할 때와 analyzed field 에 대해서 질의 할 때 조금 모호 할 수 있습니다.
즉, term query 를 사용하기 때문에 아래와 같이 예를 들겠습니다.
Field name : title
Text value : nike clothes
Case 1)
not_analyzed field)
term : nike clothes
"query" : {
"wildcard" : {
"title" : "ni*e"
}
}
not matched
결과가 나오지 않는 이유는 추출된 term 이 "nike clothes" 이기 때문에 "ni*e" 로 했을 경우 추출 텀의 제일 마지막 문자가 e 가 아니기 때문에 매칭이 되지 않은 것입니다.
매칭이 되게 하려면 "ni*" 또는 "ni*s" 로 해야 매칭이 됩니다.
Case 2)
analyzed field)
terms : [nike, clothes]
"query" : {
"wildcard" : {
"title" : "ni*e"
}
}
matched
이 경우는 추출된 term 이 두 개 이며, nike 라는 텀에 대해서 매칭이 된 것입니다.