엘라스틱서치

[엘라스틱서치]한글 like 검색을 좀 더 빠르게

에스크리토 2025. 6. 24. 10:34
반응형

기존에 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" : "검색어"
}

}

}

 

근데 이렇게 해도 여전히 문제가 남아있네

반응형