[Elasticseasrch] prefix, match_pharse_prefix쿼리와 index prefixes 옵션

HI·2022년 5월 17일
0

elasticsearch Query DSL

목록 보기
4/5

prefix와 match_pharse_prefix 차이점

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는 확장범위에 따라 결과를 받지 못할 수도 있다.

index prefixes

prefix검색 속도를 빠르게 해준다는 공식문서의 내용이다.
text필드의 매핑을 설정할때 이 옵션을 추가해주면
지정한 value까지(최대19 length) ngram처럼 토큰을 생성해 FIELD.index_prefixes 처럼 index_prefixes필드로 텀이 생성되 prefix 검색시 이 index_prefixes필드로도 함께 검색이 된다.
이때 match로 이미 확장된 텀들을 검색해 기존의 prefix,wildcard검색보다 속도가 빨리 나오는 것이다.

prefix와 wildcard 검색

둘은 내부적으로 동일하게 처리 된다고 한다.
둘다 성능상 문제는 있는 검색 쿼리이다.
wildcard에 "자동차*", prefix에 "자동차" 둘다 자동차로 시작하는 document를 찾는다.

profile
https://github.com/gaeunban

0개의 댓글