일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- License
- high level client
- matplotlib
- 차트
- TensorFlow
- zip 암호화
- Kafka
- Test
- flask
- analyzer test
- aggs
- sort
- token filter test
- 파이썬
- docker
- plugin
- license delete
- Java
- MySQL
- ELASTIC
- zip 파일 암호화
- licence delete curl
- API
- Elasticsearch
- Python
- aggregation
- Mac
- query
- springboot
- 900gle
Archives
- Today
- Total
개발잡부
[es] 자동완성 2 본문
반응형
개발환경
Mac OS
java 1.8 maven (plugin)
elastic stack 7.12.1 (es, kibana)- docker compose
애널라이저 구조가 이렇단 말이지..
애널라이저를 만들고 토크나이저에 edge_ngram 넣고 커스텀 플러그인 kr-danalyzer (korean doo analyzer) aka. KDA 를 설치해서 토큰 필터 적용, 필드에 맵핑시켜본다.
Analyzer repository
https://github.com/900gle/kr-danalyzer
pom.xml 이 있는곳으로 가자..
mvn clean install
에러나네..
저번하고 같은 에러인데.. 지미.. 어떻게 해결했더라..
# 로그를 보자 -X 옵션 추가
mvn clean -X install
솔라 관련 내용을 다 지워버리자!
elastic stack 버전이
.env 파일 열어봅세
pom.xml 수정
이것도 맞춰서
다시 빌드
집파일은 target/releases/ 안에 있구만
Elasticsearch home 안에 plugin 디렉토리 만들고 .zip 파일 이동
cp -af kr-danalyzer-7.12.1.zip ~/docker/elastic/elasticsearch/plugin
Dockerfile 에 인스톨 추가
ARG ELK_VERSION
# https://www.docker.elastic.co/
FROM docker.elastic.co/elasticsearch/elasticsearch:${ELK_VERSION}
COPY plugin/kr-danalyzer-7.12.1.zip plugin/kr-danalyzer-7.12.1.zip
RUN elasticsearch-plugin install file:///usr/share/elasticsearch/plugin/kr-danalyzer-7.12.1.zip
설치가즈아
#일단 지우자
docker compose down
#백그라운드로 실행하고 다시 빌드
docker compose up -d --build
#로그 함 봐볼까?
docker logs doo_es
인덱스 생성
PUT doo
{
"settings": {
"analysis": {
"analyzer": {
"doo_analyzer": {
"type": "custom",
"tokenizer": "autocomplete",
"filter": [
"doo-custom"
]
},
"jamo_analyzer": {
"type": "custom",
"tokenizer": "autocomplete",
"filter": [
"doo-jamo"
]
},
"chosung_analyzer": {
"type": "custom",
"tokenizer": "autocomplete",
"filter": [
"doo-chosung"
]
}
},
"tokenizer": {
"autocomplete": {
"type": "edge_ngram",
"min_gram": 2,
"max_gram": 20,
"token_chars": [
"letter",
"digit"
]
}
}
}
},
"mappings": {
"properties": {
"name": {
"type": "text",
"analyzer": "doo_analyzer",
"fields": {
"jamo": {
"type": "text",
"analyzer": "jamo_analyzer"
},
"chosung": {
"type": "text",
"analyzer": "chosung_analyzer"
}
}
}
}
}
}
데이터 입력
POST _bulk
{"index":{"_index":"doo", "_id":"1"}}
{"name":"나이키", "weight" : 1, "boost" : 1, "description" : "나이키 상품"}
{"index":{"_index":"doo", "_id":"2"}}
{"name":"나이키 에이맥스","weight" : 1, "boost" : 1,"description" : "나이키 운동화"}
{"index":{"_index":"doo", "_id":"3"}}
{"name":"나이키 에어조던","weight" : 1, "boost" : 1,"description" : "나이키 운동화 농구화"}
{"index":{"_index":"doo", "_id":"4"}}
{"name":"나이키 에어조단","weight" : 1, "boost" : 1,"description" : "나이키 운동화 농구화"}
{"index":{"_index":"doo", "_id":"5"}}
{"name":"나이키 후드티","weight" : 1, "boost" : 1,"description" : "나이키 의류"}
{"index":{"_index":"doo", "_id":"6"}}
{"name":"나이키 후드집업", "weight" : 1, "boost" : 1,"description" : "나이키 의류 자켓"}
{"index":{"_index":"doo", "_id":"7"}}
{"name":"나이키 후드나시티","weight" : 1, "boost" : 1,"description" : "나이키 의류 속옷"}
{"index":{"_index":"doo", "_id":"8"}}
{"name":"나이키 후드점퍼","weight" : 1, "boost" : 1,"description" : "나이키 의류 자켓"}
{"index":{"_index":"doo", "_id":"9"}}
{"name":"나이키 후드트레이닝","weight" : 1, "boost" : 1,"description" : "나이키 의류"}
{"index":{"_index":"doo", "_id":"10"}}
{"name":"나이키 트레이닝","weight" : 1, "boost" : 1,"description" : "나이키 의류 트레이닝"}
색인된 term 확인
GET doo/_termvectors/3?fields=name.chosung
{
"_index" : "doo",
"_type" : "_doc",
"_id" : "3",
"_version" : 1,
"found" : true,
"took" : 0,
"term_vectors" : {
"name.chosung" : {
"field_statistics" : {
"sum_doc_freq" : 49,
"doc_count" : 10,
"sum_ttf" : 49
},
"terms" : {
"ㄴㅇ" : {
"term_freq" : 1,
"tokens" : [
{
"position" : 0,
"start_offset" : 0,
"end_offset" : 2
}
]
},
"ㄴㅇㅋ" : {
"term_freq" : 1,
"tokens" : [
{
"position" : 1,
"start_offset" : 0,
"end_offset" : 3
}
]
},
"ㅇㅇ" : {
"term_freq" : 1,
"tokens" : [
{
"position" : 2,
"start_offset" : 4,
"end_offset" : 6
}
]
},
"ㅇㅇㅈ" : {
"term_freq" : 1,
"tokens" : [
{
"position" : 3,
"start_offset" : 4,
"end_offset" : 7
}
]
},
"ㅇㅇㅈㄷ" : {
"term_freq" : 1,
"tokens" : [
{
"position" : 4,
"start_offset" : 4,
"end_offset" : 8
}
]
}
}
}
}
}
음.. 초성은 잘 되었고..
자동완성 쿼리
GET doo/_search
{
"query": {
"bool": {
"should": [
{
"fuzzy": {
"name.chosung": {
"value": "ㄴㅇㅋ",
"fuzziness": 1
}
}
},
{
"prefix": {
"name.chosung": {
"value": "ㄴㅇㅋ"
}
}
}
]
}
}
}
분석기를 뺐으면 테스트 결과가 명확했을 것인디..
대충 이런식으로 .. 나오니까
name 에 맵핑된 멀티 타입으로 자동완성 만들어 봐야것네
반응형
'ElasticStack > Elasticsearch' 카테고리의 다른 글
[es] intervals query (0) | 2022.01.06 |
---|---|
[es] Java High Level REST Client (0) | 2022.01.05 |
[es] 자동완성1 (0) | 2022.01.04 |
[es] query score test (0) | 2021.12.26 |
[es] multi-match query (0) | 2021.12.20 |
Comments