본문 바로가기

Elasticsearch

Elasticsearch 복합명사를 공백포함 검색하는 방법

반응형

검색기에서 복합명사를 검색시, 사람들은 보통 띄어쓰기 구분 없이 입력하여,

둘 다 검색되기를 기대합니다.

예를 들어, "홍대입구" 와 "홍대 입구" 처럼요.

하지만, Elasticsearch에서 설정된 기본 필드를 이용하면, 기대했던 결과가 나오지 않는데요.

 

이 문제는 인덱스 생성시, pattern_replace를 사용하여 해결할 수 있습니다.

아래와 같이 교체대상의 패턴을 pattern 필드에 넣고,

교체문자를 replacement 필드에 입력합니다.

저는 여기서 정규식으로 "하나 이상의 공백"을 제거하는 패턴을 넣었습니다.

 

  {
    "analysis": {
      "char_filter": {
        "whitespace_remove": {
          "type": "pattern_replace",
          "pattern": "\\s+",
          "replacement": ""
        }
      },
      "analyzer": {
        "custom_analyzer": {
          "type": "custom",
          "tokenizer": "whitespace",
          "filter": ["lowercase", "asciifolding"],
          "char_filter": ["whitespace_remove"]
        }
      }
    }
  }

 

반응형

'Elasticsearch' 카테고리의 다른 글

docker-elk에 nori 설치하기  (0) 2021.09.29