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
- ElasticSearch 동의어 사전
- Java
- ElasticSearch 토큰필터
- Dispathcher Servlet이란
- Spring Handler
- ElasticSearch Shingle
- ElasticSearch EdgeNGram
- 자바
- Servlet Container란
- spring 장점
- ApplicationContext란
- 동의어 파일
- H2 DB
- 안드로이드
- 안드로이드스튜디오
- 인텔리제이
- Spring Container란
- Spring Servlet이란
- Servlet과 Thread
- ElasticSearch NGram
- Servlet Life Cycle
- 토큰필터
- elasticSearch
- 계산기
- Bean Factory란
- ContextLoaderListener란
- H2
- ElasticSearch 동의어 파일
- layout
- Servlet 멀티 스레딩
Archives
- Today
- Total
결국 무엇이든 해내는 사람
ElasticSearch - 캐릭터 필터 매핑 ( char_filter ) 단어 치환 [ 예제, 설명 ] 본문
두서없는 공부 노트/ElasticSearch
ElasticSearch - 캐릭터 필터 매핑 ( char_filter ) 단어 치환 [ 예제, 설명 ]
kkm8257 2021. 12. 14. 15:14반응형
-- Mapping 캐릭터 필터를 이용하면 지정단어를 다른 단어로 치환 가능
-- 특수문자를 포함하는 기능을 구현할려면 반드시 적용해야하므로 실제로 캐릭터 필터 중에선 가장 많이 사용함
POST coding/_bulk
{"index":{"_id":"1"}}
{"language":"Java"}
{"index":{"_id":"2"}}
{"language":"C"}
{"index":{"_id":"3"}}
{"language":"C++"}
-- 쿼리 질의시 C와C++ 두 개가 결과로 나온다
-- why??
-- 도큐먼트가 색인될 때 기본적으로 standard 애널라이저가 적용되면서 특수문자 C++에서 ++은 제거 되고 C는 소문자로 처리되면서
-- 실제 역 인덱스는 'c'가 저장되기 때문임
-- 그러므로 검색도 마찬가지로 C++ 을 검색하였으나( match 쿼리 ) standard 애널라이저가 적용되면서
-- C++ -> C -> c 이런식으로 검색어가 결정된 것
GET coding/_search
{
"query": {
"match": {
"language": "C++"
}
}
}
-- standard 뿐 아니라 대다수의 애널라이저들이 특수문자에 대해서는 불용어로 간주하고 제거한다
-- 특수문자가 포함된 검색어들을 검색하려면 특수문자를 먼저 다른 문자로 치환해서 저장해야한다
-- 아래 예제는 + 기호를 단어로 치환해서 색인
-- ( 인덱스를 먼저 재생성 후 다시 벌크인서트 )
DELETE coding
-- char_filter 에 커스텀 필터 cpp_char_filter 가 있고, 타입은 mapping 이다.
-- mappings 에는 배열로 주어지며 치환할 단어들이 존재
PUT coding
{
"settings": {
"analysis": {
"analyzer": {
"coding_analyzer": {
"char_filter": [
"cpp_char_filter"
],
"tokenizer": "whitespace",
"filter": [ "lowercase", "stop", "snowball" ]
}
},
"char_filter": {
"cpp_char_filter": {
"type": "mapping",
"mappings": [ "+ => _plus_", "- => _minus_" ]
}
}
}
},
"mappings": {
"properties": {
"language": {
"type": "text",
"analyzer": "coding_analyzer"
}
}
}
}
-- 위 인덱스 매핑 정보에서 애널라이저 등록 순서 흐름
-- "char_filter"에 등록된 "cpp_char_filter"를 먼저 작성해주고
-- "cpp_char_filter" 는 "analyzer" 밑에 "char_filter" 밑에 배열 안에 "cpp_char_filter"를 작성
-- 그러면 "mappings" 밑에 "properties" 밑에 필드 안에 "analyzer"에 위에서 등록해놓은 애널라이저 "coding_analyzer"를 사용 할 수 있다.
반응형
'두서없는 공부 노트 > ElasticSearch' 카테고리의 다른 글
ElasticSearch - Full Text Query [ 예제, 설명 ] (0) | 2021.12.14 |
---|---|
ElasticSearch - pattern replace란 [ 예제, 설명 ] (0) | 2021.12.14 |
ElasticSearch - (캐릭터 필터)HTML Strip 란 [ 예제, 설명 ] (0) | 2021.12.14 |
ElasticSearch - Custom Analyzer 만들기 ( 커스텀 애널라이저 ) [ 예제, 설명 ] (0) | 2021.12.14 |
ElasticSearch - Term Query란 [ 예제, 설명 ] (0) | 2021.12.14 |
Comments