반응형
Elastic Search field 와 field.keyword의 차이
-
Elastic search의 index pattern에는 여러가지가 있지만 인덱스를 생성하고 데이터를 집어 넣고 보면 같은 필드 이름에 keyword가 붙어있는 것을 볼 수 있다.
-
Elasitc Search 5 버전 이후로 String은 text,keyword로 분리 되었다.
Example Index
{
"인덱스_이름": {
"mappings": {
"properties": {
"필드_이름_1": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"필드_이름_2": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"필드_이름_3": {
"type": "long"
},
"필드_이름_4": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
}
}
}
}
위의 예제를 보면
필드_이름_1, 필드_이름_2, 필드_이름_4
type이 text로 되어있고, 밑의 필드에 keyword가 추가 되어 있다.
언뜻 보기엔 차이가 없어 보이지만, 검색을 할 때에 영향을 주는 친구이니 알아보도록 하자
Fields ?! Fields.keyword
Fields
text (Fields)인 경우에는 형태소 기반으로 분리한다고 한다.
즉, text인 경우에는 단어 혹은 일부만 검색해도 포함 된 전문 검색이 가능하다.
타입을 선언하고, 데이터를 넣은 후 검색을 시도 해 보면 아래와 같다.
-
REST의 PUT으로 mapping을 추가
#1 mapping 정의 PUT test_data { "mappings": { "_doc": { "properties": { "name": { "type": "text" } } } } }
-
POST로 document(data) 삽입
#2 insert value POST products/_doc { "name": "developer wool" }
-
GET으로 document를 검색한다.
#3 search GET products/_search { "query": { "match": { "name": "wool" } } }
검색한 결과가 나온다.
Fields.keyword
text.keyword 인 경우에는 exact value가 필요하다.
완전 동일한 단어를 검색 해야 검색이 가능하다.
-
REST의 PUT으로 mapping을 추가
#1 mapping 정의 PUT test_data { "mappings": { "_doc": { "properties": { "name": { "type": "keyword" } } } } }
-
POST로 document(data) 삽입
#2 insert value POST products/_doc { "name": "developer wool" }
-
GET으로 document를 검색한다.
#3 search GET products/_search { "query": { "match": { "name": "wool" } } }
Reference
- elastic search official documents
https://www.elastic.co/kr/blog/strings-are-dead-long-live-strings
'Old Branch' 카테고리의 다른 글
python logging 파이썬 로깅 (feat. Flask) (0) | 2020.06.01 |
---|---|
Docker와 Nginx, uwsgi를 사용해서 Flask App 만들기 (0) | 2020.05.29 |
Python - kinesis 데이터 주고받기 (0) | 2020.05.27 |
TIP - 장고 데이터베이스 여러개 사용하기 (Django multidatabase) (3) | 2020.03.20 |
Django - tweetme 소셜서비스 구현해보기 (17) - Bootstrap Navbar 적용하기 (0) | 2019.11.05 |