은전한닢과 사용자 사전 / 동의어 사전

2
post-thumbnail

사용자 사전

저번 글에서 한번 설명을 했지만, 은전한닢에서 사용자 사전은
settings.index.analysis.tokenizer.seunjeon.user_words
이다.

하지만, 이 설정은 한번 정해두면 변경이 불가능 하기에
변경이 필요하면 새로운 인덱스를 만들어서 거기에 데이터를 밀어넣고
alias를 이용해 변경해야 한다는 것도 언급했었다.

여기에 등록해두면 원래 '명사' 가 아니었던 것도 '명사' 로 인식하게 된다.
원래 존재하는 형용사 등도 등록하면 '명사'로 인식한다.

동의어 사전

이건 조금 어려운데, 은전한닢에서는 동의어 사전 기능을 제공하지 않기에 따로 filter를 만들어야 한다.
settings.index.analysis.filter 를 등록해야 한다.
예시는 아래와 같다.

{
    "filter": {
        "synonym": {
            "type": "synonym",
            "synonyms": [
                "루이비똥,루이 비통=>루이비통"
            ]
        }
    }
}

그리고 이걸
settings.index.analysis.analyzer.korean.filter
에 넣고 쓰면 된다.

{
    "analyzer": {
        "korean": {
            "type": "custom",
            "tokenizer": "seunjeon",
            "filter": ["synonym"]
        }
    }
}

synonyms 에 등록된 "루이비똥,루이 비통=>루이비통" 에 대해
'루비비똥, 루이 비통' 이 두 단어를 검색하면 자동으로 '루이비통' 으로 바꿔서 검색해준다.

예시

PUT /brands_v1.0.0
{
    "settings": {
        "index": {
            "analysis": {
                "analyzer": {
                    "korean": {
                        "type": "custom",
                        "tokenizer": "seunjeon",
                        "filter": ["synonym"]
                    }
                },
                "tokenizer": {
                    "seunjeon": {
                        "user_words": ["루이비통"],
                        "index_eojeol": "true",
                        "index_poses": ["UNK","EP","I","J","M","N","SL","SH","SN","VCP","XP","XS","XR"],
                        "decompound": "true",
                        "type": "seunjeon_tokenizer"
                    }
                },
                "filter": {
                    "synonym": {
                        "type": "synonym",
                        "synonyms": [
                            "루이비똥,루이 비통=>루이비통"
                        ]
                    }
                }
            }
        }
    },
    "mappings": {
        "properties": {
            "id": { "type": "integer" }
            "name": { "type": "text", "analyzer": "korean" }
        }
    }
}

파일로 등록하기

사용자 사전이나 동의어 사전의 단어가 늘어날 때 마다 PUT 요청으로 계속 늘리다보면 어느 순간에는 REST 요청으로 보낼 수 있는 길이의 한계에 부딪히게 될 것이다.

그래서 파일로 만들어서 등록해 둘 필요가 있다.
은전한닢에서 사용자 사전은
settings.index.analysis.tokenizer.seunjeon.user_dict_path 이다.

{
  "tokenizer": {
    "seunjeon": {
        "user_dict_path": "analyzers/F200000000",
        "index_eojeol": "true",
        "index_poses": ["UNK","EP","I","J","M","N","SL","SH","SN","VCP","XP","XS","XR"],
        "decompound": "true",
        "type": "seunjeon_tokenizer"
    }
  }
}

그리고 동의어 사전은 은전한닢이 아닌 엘라스틱서치 설정을 따라가므로
settings.index.analysis.filter.{filter_name}.synonyms_path 이다.

{
    "filter": {
        "synonym": {
            "type": "synonym",
            "synonyms_path": "analyzers/F200000000"
        }
    }
}

사용자 사전 파일 형식

단어는 개행으로 구분한다.
따옴표나 쌍따옴표로 감쌀 필요는 없다.

동의어 사전 파일 형식

사용자 사전과 비슷한데 아래 예시를 보면 감이 올 것이다.

루이비똥,루이 비통=>루이비통
캐구=>캐나다 구스
골구=>골든 구스

이런 식으로 작성하면 된다.

AWS Elasticsearch에서 파일 사용하기

https://docs.aws.amazon.com/ko_kr/elasticsearch-service/latest/developerguide/custom-packages.html

위 링크는 AWS에서 공식적으로 게시해둔 S3를 이용하여 AWS Elasticsearch에 파일을 연결하는 방법이다.

profile
지상 최강의 개발자 쥬니니

0개의 댓글