Elasticsearch 검색과 쿼리 - Query DSL
Elasticsearch 는 RESTFul API 를 지원하면서 다양한 검색 기능을 제공하고 있다.
검색 엔진 솔루션인 만큼 최적화된 검색 성능을 더불어 다양한 조건을 Query 질의 방식으로 검색할 수 있도록
검색 기능을 제공한다.
한번 Elasticsearch 의 검색 기능으로 어떻게 데이터를 검색할 수 있을지 간단히 살펴보고자 한다.
- Full Text Query
- Bool Query
- Relevancy
- Bool: Should
- Exact Value Query
- Range Query
Full Text Query
Full Text Query 풀-텍스트 쿼리는 Elasticsearch 검색에 사용되는 주요 Query 들을 의미한다.
match_allmatchmatch_phrasequery_string
match_all
match_all은 특별한 검색 조건 없이 해당 인덱스의 모든 도큐먼트를 검색
GET my_index/_searchmatch
match는 풀 텍스트 검색에 가장 일반적으로 사용되는Query- 검색하고자 하는
message필드에 있는 문자열을 포함한 모든 도큐먼트를 검색 - 여러 단어를 공백 기준으로 분리하여 입력하면
OR조건으로 검색 operator필드를 함께 요청한다면,AND조건으로 검색 가능
e.g. quick, dog 문자열을 OR 조건으로 각각 포함한 도큐먼트 검색
GET my_index/_search
{
"query": {
"match": {
"message": "quick dog"
}
}
}e.g. quick, dog 문자열을 AND 조건으로 모두 포함한 도큐먼트 검색
GET my_index/_search
{
"query": {
"match": {
"message": {
"query": "quick dog",
"operator": "and"
}
}
}
}match_phrase
match_phrase는 조건에 대한 정확한 문자열을 포함한 도큐먼트 검색slop필드를 함께 사용하면 정확한 문자열 사이의 다른 검색어를 추가 허용하는 조건으로 검색
e.g. lazy dog 문자열을 정확하게 포함한 도큐먼트 검색
GET my_index/_search
{
"query": {
"match_phrase": {
"message": "lazy dog"
}
}
}e.g. lazy 와 dog 문자열을 사이에 1개 의 단어를 추가 허용하여 도큐먼트 검색
GET my_index/_search
{
"query": {
"match_phrase": {
"message": {
"query": "lazy dog",
"slop": 1
}
}
}
}query_string
query_string은URL검색에 사용되는 루씬의 검색 문법을 이용하고 있을 때 사용query_string사용하면 다양한 복합 조건을 설정하여 검색 가능
e.g. lazy & jumping 모두 포함하거나 quick dog 문자열을 포함한 도큐먼트 검색
GET my_index/_search
{
"query": {
"query_string": {
"default_field": "message",
"query": "(jumping AND lazy) OR \"quick dog\""
}
}
}