반응형
Recent Posts
Recent Comments
관리 메뉴

개발잡부

[es] normalizer 본문

ElasticStack/Elasticsearch

[es] normalizer

닉의네임 2024. 1. 10. 12:27
반응형

normalizer

- keyword 필드는 애널라이저를 사용하지 않는 대신 노멀라이저(normalizer) 의 적용이 가능

- 노멀라이저는 애널라이저와 유사하게 settings 에서 정의하며 토크나이저는 적용할 수 없고 캐릭터 필터와 토큰 필터만 적용해서 사용이 가능함

 

실무 적용 케이스

요구사항

  • 대소문자 구분 없이 검색 가능
  • 띄어쓰기 상관없이 검색가능
  • 대소문자, 띄어쓰기 상관없이 exact 매칭 

 

테스트 ) 

 

normalizer 가 세팅된 index 생성 searchWord 필드에  doo_normalizer 맵핑 

PUT doocoo
{
  "settings": {
    "analysis": {
      "normalizer": {
        "doo_normalizer": {
          "type": "custom",
          "char_filter": [],
          "filter": ["lowercase", "asciifolding"]
        }
      }
    }
  },
  "mappings": {
    "properties": {
      "searchWord": {
        "type": "keyword",
        "normalizer": "doo_normalizer"
      }
    }
  }
}

 

데이터 입력 

 

PUT doocoo/_doc/1
{
  "searchWord": ["AI 할인","AI 최저가"]
}

 

대문자로 입력된 키워드들에 대해 색인된  term 을 확인해보잣 

 

GET doocoo/_termvectors/1?fields=searchWord

 

 

영문 대문자가 소문자로 변경되어 색인된 것을 확인  단어사이 띄어쓰기를 제거 해야 하는데 이것은 batch 에서 색인 처리할때 하는것으로..

 

검색단계에서 쿼리로 처리할지 필터로 처리할지가 애매한 부분이다. 

기존의 검색쿼리인 multi_match 안에 넣을 순 없고

 

아무튼 

 

AI 할인 , ai 할인 둘다 검색이 되고 있는데  어떤 조건에 검색이 된건지 확인해 봐야겠다. 

 

GET doocoo/_search
{
  "query": {
    "term": {
      "searchWord": {
        "value": "ai 할인"
      }
    }
  }
}

 

Profile data

 

description

반응형

'ElasticStack > Elasticsearch' 카테고리의 다른 글

[es] elasticsearch-head  (1) 2024.02.06
[es] Full-cluster restart and rolling restart  (0) 2024.02.06
[es] multi_match 쿼리와 Lucene 쿼리 구조  (0) 2023.11.28
[es] Elasticsearch Cache  (2) 2023.11.24
[es] aggs sort & cadinality  (0) 2023.11.17
Comments