엔지니어 블로그

[Opensearch/Elasticserach] Opensearch/Elasticserach 오타 교정 본문

ELK/elasticsearch

[Opensearch/Elasticserach] Opensearch/Elasticserach 오타 교정

안기용 2023. 7. 3. 09:37

Opensearch/Elasticserach 오타 교정

본 내용은 다나와 기술블로그의 '엘라스틱서치 오타교정 API 만들어보기' 글을 참조하고 있습니다.

1. 진행 환경

  • Opensearch 2.7.0

Elasticsearch에서도 동일하게 진행 가능

2.환경 구성

1. ICU Plugin 설치

bin/opensearch-plugin install analysis-icu

2.Index 생성

mappings/settings

PUT auto_complete
{
  "settings": {
    "index": {
      "analysis": {
        "filter": {
          "my_filter": {
            "mode": "decompose",
            "name": "nfc",
            "type": "icu_normalizer"
          }
        },
        "analyzer": {
          "nfd_analyzer": {
            "filter": [
              "lowercase"
            ],
            "char_filter": [
              "nfd_normalizer"
            ],
            "tokenizer": "standard"
          }
        },
        "char_filter": {
          "nfd_normalizer": {
            "mode": "decompose",
            "name": "nfc",
            "type": "icu_normalizer"
          }
        }
      }
    }
  },
  "mappings": {
    "properties": {
      "title": {
        "type": "text",
        "fields": {
          "raw": {
            "type": "keyword"
          },
          "spell": {
            "type": "text",
            "analyzer": "nfd_analyzer"
          }
        }
      }
    }
  }
}

분석에는 nfd 방식을 사용하고 있다. 관련 자료는 NFD 에서 확인할 수 있다.

3. 색인

  • 앞서 생성한 인덱스에 명품 브랜드명 색인 (ex.구찌,버버리)
  • 색인 시 모든 브랜드명에 포함된 공백 제거

3.자동완성 적용

  • Suggesters API를 사용하여 자동완성 적용 및 확인
POST /auto_complete/_search
{
  "suggest" : {
      "my-suggestion" : {
        "text" : "버버라",
        "term" : {
        "field" : "title.spell",
        "string_distance" : "jaro_winkler"
      }
    }
  }
}
  • 결과
{
...
  "suggest": {
    "my-suggestion": [
      {
        "text": "버버라",
        "offset": 0,
        "length": 3,
        "options": [
          {
            "text": "버버리",
            "score": 0.9444444,
            "freq": 1
          }
        ]
      }
    ]
  }
}

4.결론

  • 오타 교정은 잘 되는 편이다.
  • 성능 테스트가 필요할 것이다.
  • 오타가 사용자의 의도 된 오타인지 여부를 판단할 기준이 필요하다.

참고자료