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
를 적용하여 매칭하는 것이 자동완성에 훨씬 유리했다.