본문 바로가기
▶ Back-End/Server

OpenSearch 검색어 자동 완성 설정 방법 + 한글 형태소 분석기(Nori)

by 오늘도 코딩 2024. 5. 21.
728x90
반응형

더 나은 검색을 위해 검색어 자동 완성 필터를 적용하는 방법

*자세한 설명 생략

*이전 과정 아래 관련 글 참고

 

▷ 결과 미리 보기

*설정 후 몇몇 검색이 잘 안 되는 것들도 보인다.  Nori Tokenizer가 한국어를 어떻게 분할하는지 등 더 나은 검색을 위해 많은 연구가 필요

 

 

▷ 설정 전

* test2 Index 설정 값(기본 설정)

{
  "settings": {
    "number_of_shards": 1,
    "number_of_replicas": 0
  },
  "mappings": {
    "properties": {
      "memo": {
        "type": "text"
      },
      "keywords": {
        "type": "keyword"
      }
    }
  }
}

"테스트" 로 검색한 결과와 "테스" 로 검색한 결과

 

 

▷ 한글 형태소 분석기 설치(Nori)

*한국어를 분할하기 위해 Nori Tokenizer를 사용하기 때문에 설치

💡./bin/opensearch-plugin install analysis-nori
💡ls -l plugins/

 

 

▷ 자동 완성 설정

*기존 인덱스 삭제
💡curl -XDELETE -ku admin:TestUser2@ "https://localhost:9200/test2"

[인덱스 설정]
{
  "settings": {
    "index": {
      "analysis": {  // 분석 설정
        "filter": {  // 필터 설정
          "test_autocomplete": {  // 필터 사용자 정의
            "type": "edge_ngram",  // 검색어 자동 완성이나 부분 일치 검색을 위해 사용
            "min_gram": 2,  // 최소 길이
            "max_gram": 20  // 최대 길이
          }
        },
        "analyzer": {  // 분석기 설정
          "nori_analyzer": {  // 분석기 사용자 정의
            "type": "custom",  // 커스텀 분석기 타입
            "tokenizer": "nori_tokenizer",  // Nori Tokenizer 사용 (한국어용)
            "filter": [  // 필터 목록
              "test_autocomplete",  // 위에서 정의한 edge_ngram 필터 사용
              "lowercase"  // 대소문자 구분 없이 검색
            ]
          }
        }
      }
    }
  },
  "mappings": {
    "properties": {
      "memo": {
        "type": "text",
        "analyzer": "nori_analyzer" // "nori_analyzer" 분석기 적용
      },
      "keywords": {
        "type": "keyword" // 정적인 텍스트를 저장(분석X)
      }
    }
  }
}

*Index 생성
💡curl -XPUT -ku admin:TestUser2@ "https://localhost:9200/test2" -H "Content-Type: application/json" -d "{\"settings\":{\"index\":{\"analysis\":{\"filter\":{\"test_autocomplete\":{\"type\":\"edge_ngram\",\"min_gram\":2,\"max_gram\":20}},\"analyzer\":{\"nori_analyzer\":{\"type\":\"custom\",\"tokenizer\":\"nori_tokenizer\",\"filter\":[\"test_autocomplete\",\"lowercase\"]}}}}},\"mappings\":{\"properties\":{\"memo\":{\"type\":\"text\",\"analyzer\":\"nori_analyzer\"},\"keywords\":{\"type\":\"keyword\"}}}}"

*_bulk
💡curl -XPOST -ku admin:TestUser2@ "https://localhost:9200/test2/_bulk" -H "Content-Type: application/json" --data-binary "@C:\Users\JH\Desktop\SampleData.json"

 

 

▷ 결과 확인

"테스" 로 검색한 결과와 "데이" 로 검색한 결과

 

 

▷ 관련 글

 

OpenSearch Dashboard Index Patterns 생성

OpenSearch에서 데이터를 조회하고 시각화할 때 사용하는 Index들의 구조를 정의하는 설정*자세한 설명 생략  ▷ Index Patterns 생성 ① Opensearch Dashboard 접속*localhost:5601*OpenSearch 설치 시 설정한 비밀

coding-today.tistory.com

 

 

728x90
728x90

댓글