6.3.2 Term 쿼리

이 문서의 허가되지 않은 무단 복제나 배포 및 출판을 금지합니다. 본 문서의 내용 및 도표 등을 인용하고자 하는 경우 출처를 명시하고 김종민(kimjmin@gmail.com)에게 사용 내용을 알려주시기 바랍니다.

Elasticsearch에서 제공하는 쿼리 중에는 term 쿼리가 있습니다. match 쿼리와 문법은 유사하지만 term 쿼리는 입력한 검색어는 애널라이저를 적용하지 않고 입력된 검색어 그대로 일치하는 텀을 찾습니다. 따라서 jumps, jumping 으로 검색하면 결과가 나타나지 않고 jump로 검색해야 결과가 나타납니다.

request
response
request
term 쿼리로 my_index2 에서 jumps 검색
GET my_index2/_search
{
"query": {
"term": {
"message": "jumps"
}
}
}
response
term 쿼리로 my_index2 에서 jumps 검색 결과
{
"took" : 0,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 0,
"relation" : "eq"
},
"max_score" : null,
"hits" : [ ]
}
}
request
response
request
term 쿼리로 my_index2 에서 jump 검색
GET my_index2/_search
{
"query": {
"term": {
"message": "jump"
}
}
}
response
term 쿼리로 my_index2 에서 jump 검색 결과
{
"took" : 0,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 1,
"relation" : "eq"
},
"max_score" : 0.2876821,
"hits" : [
{
"_index" : "my_index2",
"_type" : "_doc",
"_id" : "1",
"_score" : 0.2876821,
"_source" : {
"message" : "The quick brown fox jumps over the lazy dog"
}
}
]
}
}

이렇게 도큐먼트의 원문은 jumps 이지만 어떤 쿼리를 사용하느냐에 따라 원문과 같은 jumps 검색어를 넣어도 검색이 되지 않는 경우가 있습니다.

텍스트 분석(Analysis) 과정은 검색에 사용되는 역 인덱스에만 관여합니다. 원본 데이터는 변하지 않으므로 쿼리 결과의 _source 항목에는 항상 원본 데이터가 나옵니다.

지금까지 본 것 처럼 Elasticsearch는 데이터를 실제로 검색에 사용되는 텀(Term) 으로 분석 과정을 거쳐 저장하기 때문에 검색 시 대소문자, 단수나 복수, 원형 여부와 상관 없이 검색이 가능합니다. 이러한 Elasticsearch의 특징을 풀 텍스트 검색(Full Text Search) 이라고 하며 한국어로 전문 검색 이라고도 합니다.

앞에서 설명한 것들 외에도 elasticsearch에서 사용 가능한 애널라이저, 캐릭터 필터, 토크나이저, 토큰필터 들의 목록은 공식 홈페이지 도큐먼트에서 확인이 가능합니다.