match / match_pharse 처럼 prefix / match_pharse_prefix도 같다.
pharse는 순서까지 고려해서 검색 결과를 반환한다.
{
"match_phrase_prefix":{
"query":"전기 자동차"
}
}
이렇게 match_pharse_prefix로 하면 공백을 포함한 키워드 검색하여 두 단어의 순서까지 고려한다는 점이 prefix와 다른점이고,
일반적으로
{
"prefix":"자동차"
}
{
"match_phrase_prefix":"자동차"
}
하지만 match_phrase_prefix는 확장할 범위를 선택해야 한다.
max_expansions
로 설정할 수 있다. 기본값은 50이다.
prefix는 확장 범위를 정하지 않아도 "자동차"로 시작하는 모든 결과를 받아오지만, match_phrase_prefix는 확장범위에 따라 결과를 받지 못할 수도 있다.
prefix검색 속도를 빠르게 해준다는 공식문서의 내용이다.
text필드의 매핑을 설정할때 이 옵션을 추가해주면
지정한 value까지(최대19 length) ngram처럼 토큰을 생성해 FIELD.index_prefixes 처럼 index_prefixes필드로 텀이 생성되 prefix 검색시 이 index_prefixes필드로도 함께 검색이 된다.
이때 match로 이미 확장된 텀들을 검색해 기존의 prefix,wildcard검색보다 속도가 빨리 나오는 것이다.
둘은 내부적으로 동일하게 처리 된다고 한다.
둘다 성능상 문제는 있는 검색 쿼리이다.
wildcard에 "자동차*", prefix에 "자동차" 둘다 자동차로 시작하는 document를 찾는다.