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 | 29 | 30 | 31 |
Tags
- Kotlin in action 6장
- Kotlin in action 3장
- 스프링 컨테이너와 스프링 빈
- kotlin in action 정리
- 고급매핑
- 백준 20055 컨베이어 벨트 위의 로봇
- 자바 ORM 표준 JPA 프로그래밍 7장
- 20055
- Kotlin
- spring
- Kotlin In Action
- 스프링 핵심 원리
- 코틸린인액션
- 컨베이어 벨트 위의 로봇 Python
- KotlinInAction
- 백준 13460 Python
- Kotlin in action 5장
- 기능개발 python
- 20055 컨베이어 벨트 위의 로봇
- 백준
- 스프링 핵심 원리 - 기본편
- 스프링 핵심 원리 이해
- 코틀린
- Python
- 코틀린인액션
- 7장 고급매핑
- 싱글톤 컨테이너
- 객체 지향 설계와 스프링
- 13460 구슬탈출 2
- Kotlin in action 10장
Archives
- Today
- Total
기록하는 습관
Elasticsearch (11) - 색인기 본문
Tokenizer
: 문장을 정해진 기준(공백 등)으로 분리하여 token을 생성하는 작업.
- nori tokenizer
- nori 형태소 분석기를 사용하는 토크나이저
- whitespace
- 공백 기준으로 분리하는 토크나이저
- keyword
- 입력된 문장이나 단어 그 자체를 토큰으로 만드는 토크나이저
- standard
- lowercase + whitespace 를 수행하는 토크나이저
Token Filter
: Tokenizer로 분리된 token들을 원하는 형태로 가공하는 작업.
# index 구성
- nori_crawl, nori_crawl_hanspell
- Tokenizer
- type: nori_tokenizer를 사용하여 nori 형태소 분석기로 토크나이징 진행
- user_dictionary: 사용자 사전을 정의했다.
- decompound_mode: mixed로 설정을 하면, 복합어를 분석한 결과와 원래 결과를 함께 저장해준다.
- filter
- nori_readingform: 한자를 한글로 바꿔주는 필터
- nori_posfilter: 원하는 품사만 걸러주는 필터
- lowercase: 소문자로 변환해주는 필터
- remove_duplicates: 중복 제거해주는 필터
- char_filter:
- 전처리 필터로 , html_strip을 적용했다.
- stopwords
- _korean_ : 한국어의 불용어를 처리해준다.
- Tokenizer
- magic_khaiii, magic_khaiii_hanspell
- analyzer (space_analyzer)
- tokenizer를 whitespace로 한 이유는 현재 khaiii가 ES에 내장되어 있지 않고 외부에 있기 때문에, khaiii를 거친 데이터가 다시 DB에 저장되고 ES로 색인된다. 따라서, 공백 기준으로 분리를 해야만 khaiii 형태소 분석을 적용한 색인을 할 수가 있다.
- filter를 lowercase로 둔 이유는, 한글에는 관계 없지만 영어가 들어왔을 때 소문자로 색인이 되어야 대/소문자 관계없는 색인이 가능하기 때문이다.
- analyzer (keyword_trim)
- tokenizer를 keyword로 한 이유는 nickname은 형태소 분석을 하면 안되기 때문이고, 크롤링 데이터를 보면 양쪽 공백이 들어가 있기 때문에 ‘trim filter’를 통해서 제거해주기 위해 위와 같은 analyzer 구성을 했다.
- properties
- text type은 형태소 분석을 할 수 있는 타입으로, title, content 필드에 설정을 해주고 space_analyzer를 적용했다.
- nickname은 원래 keyword type으로 지정하고 analyzer를 사용하면 안되는데, 앞에서 말한 이유로 text type으로 설정한 후에 keyword_trim analyzer를 적용했다.
- analyzer (space_analyzer)
- fscore_khaiii_multi
- analyzer
- space_analyzer
- 위와 동일
- keyword_trim
- 위와 동일
- edge_analyzer
- whitespace tokenizer로 token을 생성한 후에, edge_ngram filter를 적용한다.
- 사용자 사전에 없는 단어를 잡기 위해 생각한 방법으로, 만약 “마술양품점은” 단어를 기준으로 edgeNgram을 적용한다면 ‘마술’, ‘마술양’, ‘마술양품’, ‘마술양품점’ 과 같이 분석될 것이다. 한글 특성상 조사 등은 단어 뒤에 붙기 때문에 edgeNgram을 적용했다.
- space_analyzer
- filter
- edgeNgram
- 한 글자까지 넣게 되면 색인된 데이터가 많아지게 되므로 min_gram을 2로 설정했고, max_gram은 10으로 설정했다.
- edgeNgram
- properties
- multi_field를 사용하여 같은 데이터를 2가지 방법으로 색인해 field에 저장했다.
- title과 content에 대해 space_analyzer, edge_analyzer를 적용했다.
- nickname은 위와 동일하게 keyword_trim 분석기를 적용했다.
- analyzer
- autocomplete
- 이 index는 자동완성을 위한 인덱스이다. 티몬에서 개발한 코드를 이용해 플러그인을 만들었고, 해당 플러그인을 사용해 색인을 진행했다.
- analyzer
- jamo_analyzer
- 자동완성을 위해 색인할 때 적용하는 분석기이다.
- keyword tokenizer를 사용하고, jamo_split, edge10Gram, lowercase filter를 적용한다.
- test
- ‘자동완서’ 분석 시, ‘ㅈ’, ‘ㅈㅏ’, ‘ㅈㅏㄷ’… 이런 식으로 모두 색인이 된다.
- jamo_srch_analyzer
- 자동완성 검색할 때 사용하는 분석기이다.
- ‘자동완서’ 검색 시, jamo_srch_analyzer에 의해 ‘ㅈㅏㄷㅗㅇㅇㅘㄴㅅㅓㅇ’으로 분석된다.
- chosung_analyzer
- 초성 색인을 위해 사용하는 분석기이다.
- ‘자동완서’ 색인 시, ‘ㅈ’, ‘ㅈㄷ’, ‘ㅈㄷㅇ’, ‘ㅈㄷㅇㅅ’이 색인된다.
- chosung_srch_analyzer
- 초성검색 할 때 사용하는 분석기이다.
- ‘ㅈㄷㅇㅅ’ 검색 시, 그대로 검색해야 하므로 keyword 토크나이저를 사용한다.
- fscore_khaiii_shinedge
- 정확도를 높이기 위해 고안된 색인 방법. 지금까지 space, edge, 로 title, content를 분석했지만 여전히 예외 케이스들과 구멍이 있었다.
- analyzer
- space_analyzer
- 위와 동일
- ngram_analyzer
- ngram tokenizer를 적용
- shingle_analyzer
- shingle tokenizer를 적용. shingle tokenizer는 단어별 ngram이라고 생각하면 된다. ngram은 단어 안에서 한글자 별로 분리하는 반면, shingle tokenizer는 단어별로 분리를 해준다.
- edge_analyzer
- 위와 동일
- shingle_edge_analyzer
- shingle filter를 적용후, edge_ngram filter를 적용했다.
- space_analyzer
- jamo_analyzer
'개발 > Elasticsearch' 카테고리의 다른 글
Elasticsearch (12) - Update By Query vs. Reindex (0) | 2022.07.16 |
---|---|
Elasticsearch (10) - English 분석 (0) | 2022.07.06 |
Elasticsearch (9) - Elasticsearch Client (0) | 2022.07.06 |
Elasticsearch (8) - Elasticsearch Shard 최적화 (0) | 2022.07.06 |
Elasticsearch (7) - Elasticsearch와 Lucene (0) | 2022.07.06 |
Comments