[엘라스틱서치]한글 like 검색을 좀 더 빠르게
기존에 like검색을 할때는
채연
이라고 검색하면 김채연이나 이채연은 검색이 안된다 그래서
*채연*
이런식으로 했었는데 이렇게하면 아무리 엘라스틱서치라고 해도 속도가 엄청 느려진다.
그래서 인덱스를 생성할때 검색 필드에 대해서 미리 설정을 해서 매핑해주는것이 좋다.
PUT /my_index_name
{
"settings": {
"index": {
"max_ngram_diff": 8
},
"analysis": {
"tokenizer": {
"ngram_tokenizer": {
"type": "ngram",
"min_gram": 2,
"max_gram": 5,
"token_chars": [ "letter", "digit" ]
}
},
"analyzer": {
"ngram_analyzer": {
"type": "custom",
"tokenizer": "ngram_tokenizer",
"filter": [ "lowercase" ]
}
}
}
},
"mappings": {
"properties": {
"subject": {
"type": "text",
"analyzer": "ngram_analyzer"
}
}
}
}
검색 필드가 subject라고 할때 매핑 방법이다.
기존에 이미 인덱스를 쓰고 있다면 reindex해서 기존거는 삭제하고 다시 만들어서 해야한다.
귀찮지만 좀더 빠른 검색을 위해.
그리고 검색 쿼리는 아래처럼 하면된다
{
"query": {
"match_phrase" : {
"subject" : "검색어"
}
}
}
근데 이렇게 해도 여전히 문제가 남아있네