본문 바로가기
ElasticSearch & OpenSearch

[OpenSearch] dictionary 추가하기

by yonikim 2021. 4. 23.
728x90

AWS ES 에는 Elasticsearch 커뮤니티의 플러그인이 미리 포함되어 있기 때문에 bin/elasticsearch-plugin install 명령어를 날려줄 필요가 없다. (워후)

 

플러그인 전체 목록은 Kibana 의 Dev Tools 에서 아래와 같이 명령어를 날리거나,

GET _cat/plugins?v

curl 명령어를 통해 확인할 수 있다.

$ curl -u ${ES_USER}:${ES_PASSWORD} ${ES_HOST}/_cat/plugins

 


사용자 사전 추가하기


 

한글 형태소 분석기로 analysis-seunjeon (은전한닢, mecab) 가 있는데, 형태소 분석기를 아무리 잘 만들어놨다고 해도 한글의 세계는 오묘하고도 어렵기 때문에 사용자 사전을 추가해주는게 좋다.

 

1. 사용자 사전을 텍스트 파일로 만든다.

+ 동의어 사전도 추가해 준다.

 

2. AWS S3 버킷을 만든다.

 

3. 위에서 만든 사용자 사전 파일을 AWS S3 에 업로드한다.

 

4. AWS S3 에서 AWS ES 패키지로 데이터를 가져온다.

1) AWS Elasticsearch Service > 패키지 > [가져오기] 버튼 클릭

2) 이름, AWS S3 URI 입력 > [가져오기] 버튼 클릭

3) 패키지 확인

 

5. AWS ES 에 패키지를 연결한다.

1) 도메인 클릭 > 패키지 탭 클릭 > [연결] 버튼 클릭

2) 해당하는 패키지를 클릭 > [연결] 버튼 클릭

6. 인덱스를 생성한 후 settings 정보에 해당하는 사전의 패키지 ID 를 넣는다.

1) 인덱스 생성

PUT test-index

2) 인덱스 CLOSE (settings 설정을 하기 위해선 인덱스를 닫아놔야 한다. )

POST test-index/_close

3) 인덱스 settings 설정

PUT test-index/_settings
{
    "analysis":{
       "analyzer":{
          "seunjeon_analyzer":{
             "type":"custom",
             "tokenizer":"seunjeon_tokenizer",
             "filter":[
                "synonym",
                "lowercase"
             ]
          }
       },
       "tokenizer":{
          "seunjeon_tokenizer":{
             "type":"seunjeon_tokenizer",
             "user_dict_path":"analyzers/F33804743",
             "index_eojeol": "true",
             "index_poses": ["N","SL", "SH", "SN", "XR", "V", "UNK", "M"],
             "decompound": "true"
          }
       },
       "filter":{
         "synonym": {
            "type" : "synonym", 
            "synonyms_path" : "analyzers/F107270250"
          }
       }
    }
 }

4) 인덱스 OPEN

POST test-index/_open

 


 

<Before>

GET /_analyze
{
  "tokenizer": "seunjeon_tokenizer",
  "text": [
    "요니킴"
  ]
}

=>

{
  "tokens" : [
    {
      "token" : "요니/N",
      "start_offset" : 0,
      "end_offset" : 2,
      "type" : "N",
      "position" : 0
    },
    {
      "token" : "킴/N",
      "start_offset" : 2,
      "end_offset" : 3,
      "type" : "N",
      "position" : 1
    }
  ]
}

 

<After>

GET test-index/_analyze
{
  "analyzer": "seunjeon_analyzer",
  "text": [
    "요니킴"
  ]
}

=>

{
  "tokens" : [
    {
      "token" : "요니킴/N",
      "start_offset" : 0,
      "end_offset" : 3,
      "type" : "N",
      "position" : 0
    },
    {
      "token" : "요니/N",
      "start_offset" : 0,
      "end_offset" : 3,
      "type" : "SYNONYM",
      "position" : 0
    }
  ]
}

 

 


패키지 업데이트 방법도 공유한다. 

 

1. 패키지 이름을 클릭한다. 

 

2. [패키지 업데이트] 버튼을 클릭한다.

 

3. 적용된 도메인의 패키지에서 [업데이트 적용] 버튼을 클릭한다.

 

※ 만약 연결 실패 오류가 났다면?

1. 인덱스 CLOSE -> 2. 연결 해제 -> 3. 다시 연결 -> 4. 인덱스 OPEN

728x90