기존에 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" : "검색어"
}
}
}
근데 이렇게 해도 여전히 문제가 남아있네
'엘라스틱서치' 카테고리의 다른 글
[키바나]키바나 설정시 토큰을 사용하지 않고 계정 생성해서 사용하기 (0) | 2025.06.30 |
---|---|
[엘라스틱서치]인덱스가 삭제가 안될때 (0) | 2025.06.24 |
엘라스틱서치, 데이터를 업데이트하는 다양한 방법 (0) | 2023.09.13 |
엘라스틱서치, 필드의 타입을 변경할때는 그냥 reindex 해서 인덱스를 다시 만들자 (0) | 2023.09.05 |
엘라스틱서치 - 와일드카드 검색, like 검색 (0) | 2023.08.31 |