GET /_search
{
"query": {
"prefix" : { "user" : "ki" }
}
}
search.allow_expensive_queries 설정이 false 일 경우 prefix 쿼리는 사용 불가index_prefixes 설정을 통해 성능 향상index_prefixes 설정된 경우 search.allow_expensive_queries 가 false 여도 실행 가능index_prefixes: 필드 값에 대해 prefix를 별도의 인덱스로 저장min_chars: 저장할 최소 prefix 길이. 1 이상으로 제한, default 2max_chars: 저장할 최대 prfix 길이. 20 미만으로 제한, default 값 5PUT my_index
{
"mappings": {
"properties": {
"title": {
"type": "text",
"index_prefixes": {
"min_chars": 2,
"max_chars": 5
}
}
}
}
}
앞 단어들은 구문(phrase) 매칭, 마지막 단어만 prefix 쿼리
ex) quick brown 은 match_phrase와 같이 매칭, 마지막 단어인 f 만 prefix 쿼리와 같이 동작
GET /_search
{
"query": {
"match_phrase_prefix": {
"message": {
"query": "quick brown f"
}
}
}
}
match_phrase 매칭한 후, 매칭된 50개 문서에 대해서만 prefix 매칭prefix 검색하기 때문에, 문서가 누락될 수 있음prefix 쿼리도, match_phrase_prefix 도 성능이 그리 좋지 않았다.edge 하위 필드를 두고 edge ngram 를 적용하여 매칭하는 것이 자동완성에 훨씬 유리했다.