Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- Kotlin in action 5장
- 백준
- 20055 컨베이어 벨트 위의 로봇
- 7장 고급매핑
- 스프링 핵심 원리 이해
- Kotlin in action 6장
- 자바 ORM 표준 JPA 프로그래밍 7장
- Kotlin In Action
- 20055
- 코틀린
- 기능개발 python
- 스프링 핵심 원리
- Kotlin in action 3장
- kotlin in action 정리
- 코틀린인액션
- 싱글톤 컨테이너
- 13460 구슬탈출 2
- 스프링 컨테이너와 스프링 빈
- 백준 13460 Python
- 고급매핑
- 객체 지향 설계와 스프링
- 컨베이어 벨트 위의 로봇 Python
- 코틸린인액션
- Python
- KotlinInAction
- Kotlin in action 10장
- Kotlin
- 백준 20055 컨베이어 벨트 위의 로봇
- 스프링 핵심 원리 - 기본편
- spring
Archives
- Today
- Total
기록하는 습관
Elasticsearch (4) - 동의어 사전 본문
** Elasticsearch를 공부하며 정리한 글입니다.
## 들어가며
Elasticsearch에서 제공하는 동의어 기능
- synonym token filter : 색인시 사용하는 필터
- synonym graph token filter : 검색시 사용하는 필터
동의어는 색인할 때 보다, 검색할 때 처리하는 것이 성능이 더 좋다.
- 관련 자료: 동의어로 Elasticsearch의 성능 강화
동의어를 수동으로 진행하는 이유
- 게임 용어 동의어 같은 경우, 줄임말이 가장 흔하다. 하지만 이는 직접 만드는 줄임말이기 때문에 학습을 시키지 않는 이상 사용자가 직접 등록하는 작업이 필요하다. 동의어에 대한 open api를 조사했지만 게임 용어에 대한 api는 제공하고 있지 않다.
- 결론:
- 일반 용어: api 사용
- 게임 용어: 수동으로 등록
- 나중에는 학습 모델을 이용해 자동으로 게임 용어 줄임말, 동의어를 학습 해 등록할 수 있는 과정도 있으면 좋겠다는 생각이 든다.
## synonym graph token filter 조사
1. 동의어 처리를 위해 토큰 필터는 그래프 토큰 스트림을 생성한다.
2. 예) filter에 추가하기
- Synonyms_path는 config 파일의 상대경로.
3. Option
- expand
- Default == true
- lenient
- 예외를 무시할 것인지.
- Default == false
- 예)
- stopwords로 “bar” 단어가 있기 때문에 “bar”는 건너뛰고 foo -> baz만 적용된다.
- 만약, “foo, baz => bar” 였다면 아무것도 추가되지 않았을 것.
- 만약, “bar, foo, baz” 이고 expand==false 였다면 아무것도 추가되지 않았을 것.
- 왜냐하면 bar이 stopwords인데 첫 번째에 위치하므로 확장 옵션인 expand가 false가 적용되어 그 뒤가 무시되기 때문이다.
- 만약, “bar, foo, baz” 이고 expand==true 였다면 “foo, baz => foo, baz” 와 같이 매핑할 것.
- 즉, stopword를 제외한 모든 매핑과 동일하다.
4. Solr 동의어
- 치환하기 - Explicit mappings (“=>" 로 구분)
- i-pod, i pod => ipod
- Equivalent synonyms ( “,” 로 구분)
- ipod, i-pod, i pod
- expand == true 인 경우
- ipod, i-pod, i pod 모두 동등
- 예) explicit mappings:
- ipod, i-pod, i pod => ipod, i-pod, i pod
- expand == false 인 경우
- ipod, i-pod, i pod 모두 동등하지만 첫 번째만 적용
- 예) explicit mappings:
- ipod, i-pod, i pod => ipod
- Multiple synonym mappings
- foo => foo bar
- foo => baz
- 예) explicit mappings
- foo => foo bar, baz
- WordNet 동의어
- 예)
- 동의어 파일 구문 분석
- 동의어 필터가 형태소 분석기 뒤에 배치되면, 형태소 분석기도 동의어 항목에 적용된다.
- 주의
- Elasticsearch 클러스터의 불용어 목록에는 동의어 사전 파일에 지정된 키워드가 포함될 수 없다.
- 즉, 동의어로 적용된 단어는 불용어 목록에 포함되면 안된다!
- 그렇지 않으면 새 동의어 사전 파일을 업로드하거나 다른 변경을 수행 할 때 클러스터의 로그에 오류가 보고 된다.
# 인덱스의 열고 닫는 번거로움 제거 (참고)
검색기에서 동의어 사전을 적용하려면 동의어 사전이 변경될 경우 인덱스를 일시적으로 close 한 뒤, open 해서 reload를 해야 한다.
노드가 다시 시작되거나 닫힌 인덱스가 다시 열릴 때, 인덱스 생성 시에 분석기가 인스턴스화 되기 때문이다.
하지만, ES 7.3 부터는 _reload_search_analyzers API를 이용하면 인덱스의 모든 분석기가 다시 Reload 되기 때문에 인덱스를 close, open 하는 작업을 하지 않아도 된다.
사용 방법 : POST /{index-name}/_reload_search_analyzers
이 API를 사용하려면 “updateable” : true 조건을 꼭 넣어줘야 한다.
search_analyzer도 명시하기.
'개발 > Elasticsearch' 카테고리의 다른 글
Elasticsearch (6) - 노드의 종류 (0) | 2022.07.06 |
---|---|
Elasticsearch (5) - 클러스터,Shard,Index 개념 (0) | 2022.07.06 |
Elasticsearch (3) - reindex (0) | 2022.03.12 |
Elasticsearch (2) - index 최적화 방법 (0) | 2022.03.12 |
Elasticsearch (1) - alias (0) | 2022.03.12 |
Comments