본문 바로가기
Elastic Search

[Elastic Search] 동의어 사전 인덱싱 문제 WIP (failed to verify index)

by AsCE_hyunseung 2021. 5. 30.

  • 동의어 사전에 브랜드 한글 이름, 영문 이름을 등록하려고 하는데 인덱싱이 안된다.
  • 불용어 규칙때문인지 인덱싱이 안된다.(근데 불용어 규칙이 적용되기 전 인데, 아닌것 같은데)
  • 토크나이저 때문인가
  • 일단 삑나는 브랜드명 예시 적어놓기
    • 빈앤유 → 비
    • 솔트인이어 → 이
    • 멀릭 → 멀
    • 레브드제이 → 들
    • 플로움 → 롭
    • 제인트 → 저
    • 이어리 → 이
    • 미드나잇모먼트 → 미드
    • 저인트 → 저이
  • 사용사 사전에서 토크나이징 안되게 막아놓으면 괜찮긴한데, 원인을 모르겄네

 

토크나이징 쿼리

GET test-store-v7/_analyze
{
  "tokenizer": "korean",
  "text": "플로움"
}
  • 현재 korean 토크나이저는 nori_tokenizer라는 형태소 분석기를 사용하고 있다.
  • korean 토크나이저에서 decompound_mode 수정해가면서 테스트 해보도록 한다.

 

decompound_mode : 복합명사를 토크나이저가 처리하는 방식

  • none : 어근을 분리하지 않고 완성된 합성어만 저장합니다.(ex. 합정역 -> 합정역)
  • discard (디폴트) : 합성어를 분리하여 각 어근만 저장합니다. (ex. 합정역 -> 합정, 역)
  • mixed : 어근과 합성어를 모두 저장합니다. (ex. 합정역 -> 합정, 역, 합정역)

 

  1. decompound_mode = mixed (인덱싱 에러날때 현재 설정)
    • "플로움" 토크나이징할때 롭(?) 이거는 왜 나오는거지
    {
      "tokens" : [
        {
          "token" : "플",
          "start_offset" : 0,
          "end_offset" : 1,
          "type" : "word",
          "position" : 0
        },
        {
          "token" : "로움",
          "start_offset" : 1,
          "end_offset" : 3,
          "type" : "word",
          "position" : 1,
          "positionLength" : 2
        },
        {
          "token" : "롭",
          "start_offset" : 1,
          "end_offset" : 3,
          "type" : "word",
          "position" : 1
        },
        {
          "token" : "ᄆ",
          "start_offset" : 1,
          "end_offset" : 3,
          "type" : "word",
          "position" : 2
        }
      ]
    }​
  2. decompound_mode = none
    {
      "tokens" : [
        {
          "token" : "플",
          "start_offset" : 0,
          "end_offset" : 1,
          "type" : "word",
          "position" : 0
        },
        {
          "token" : "로움",
          "start_offset" : 1,
          "end_offset" : 3,
          "type" : "word",
          "position" : 1
        }
      ]
    }​
  3. decompound_mode = discard
    {
      "tokens" : [
        {
          "token" : "플",
          "start_offset" : 0,
          "end_offset" : 1,
          "type" : "word",
          "position" : 0
        },
        {
          "token" : "플롭",
          "start_offset" : 0,
          "end_offset" : 3,
          "type" : "shingle",
          "position" : 0,
          "positionLength" : 2
        },
        {
          "token" : "플롭ᄆ",
          "start_offset" : 0,
          "end_offset" : 3,
          "type" : "shingle",
          "position" : 0,
          "positionLength" : 3
        }
      ]
    }​
  • nori_tokenizer는 사전 기반으로 토큰나이징을 하는거로 알고 있는데, 외래어는 사전에 등록되어있지 않아서 decompound_mode=mixed할때 원형 보존이 안되는듯하다 (브랜드 이름은 외래어가 많다)
  • 그래서 사용자 사전에 브랜드 이름을 등록해서 이상하게 토크나이징이 안되도록 했다.
  • 아직 토크나이징이 이상하게 되는거 원인을 못찾았으니 나중에 알게되면 내용을 더 채우도록 하겠다.