개발/DB

ElasticSearch keyword string 차이

말고기 2021. 8. 1. 23:21
728x90
반응형

ElasticSearch 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
반응형