개발/DB
ElasticSearch keyword string 차이
말고기
2021. 8. 1. 23:21
728x90
반응형
ElasticSearch data types
- ES에는 다양한 data type이 존재한다.
- ES data types
keyword type이란?
- 결론적으로 말씀드리면 keyword type은 anlayzer를 거치지 않고, text를 그대로 저장한다. ( tokenizer, filter를 거치지 않음 )
- 따라서 exact match를 활용할 때, 사용할 수 있다.
Example
아래의 쿼리를 통해서 테스트해볼 수 있다.
1. Index 생성
- index 생성
curl --location --request PUT 'localhost:9200/malgogi-test-v1?include_type_name=true' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--data-raw '{
"settings": {
"index": {
"number_of_shards": 1,
"number_of_replicas": 0
}
},
"mappings": {
"_doc": {
"properties": {
"name": {
"type": "text"
},
"title": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword"
}
}
},
"description": {
"type": "text"
}
}
}
}
}'
2. Test data 넣기
아래 API를 통해서 테스트 데이터를 생성한다.
curl --location --request PUT 'localhost:9200/malgogi-test-v1/_doc/2' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--data-raw '{
"title": "malgogi test 2djkd",
"description": "this is malgogi test"
}'
3. Search
- 아래와 같이 term 쿼리로 테스트 가능하다.
- keyword type의 경우에는 정확한 텍스트를 입력해야만 검색이 가능하다.
# Search with title
curl --location --request GET 'localhost:9200/malgogi-test-v1/_search?pretty' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--data-raw '{
"query": {
"terms": { "title": ["malgogi", "test"] }
}
}'
# Search with title.keyword
curl --location --request GET 'localhost:9200/malgogi-test-v1/_search?pretty' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--data-raw '{
"query": {
"terms": { "title.keyword": ["malgogi", "test"] }
}
}'
출처
728x90
반응형