검색 실행
edit검색 실행
edit몇 가지 기본 검색 매개변수를 익혔으므로 쿼리 DSL을 좀 더 자세히 알아보겠습니다. 먼저 반환된 문서 필드를 살펴볼까요? 기본적으로 전체 JSON 문서가 모든 검색의 일부로 반환됩니다. 이를 소스(검색 적중의 _source
필드)라고 합니다. 전체 소스 문서가 반환되는 것을 원치 않는다면 소스 의 일부 필드만 반환하도록 요청할 수 있습니다.
이 예는 검색에서 account_number
및 balance
(`_source`의 내부에 있음)의 2개 필드를 반환하는 방법을 보여줍니다.
GET /bank/_search { "query": { "match_all": {} }, "_source": ["account_number", "balance"] }
위 예는 _source
필드를 줄였을 뿐입니다. 여전히 _source`라는 이름의 필드 하나만 반환하지만, 그 안에는 `account_number
및 balance
필드만 있습니다.
SQL 배경 지식이 있다면 개념상 SQL SELECT FROM
필드 목록과 다소 비슷하다는 것을 알 수 있습니다.
쿼리 부분으로 진행할까요? 앞서 match_all
쿼리가 모든 문서를 비교하는 데 어떻게 사용되는지 알아봤습니다. match
쿼리라는 새로운 쿼리를 소개합니다. 이는 기본 필드 검색 쿼리라고 볼 수 있습니다. 즉 특정 필드 또는 필드 집합에 대해 검색이 수행됩니다.
이 예에서는 번호가 20인 계정이 반환됩니다.
GET /bank/_search { "query": { "match": { "account_number": 20 } } }
주소에 "mill"이라는 용어가 있는 모든 계정을 반환합니다.
GET /bank/_search { "query": { "match": { "address": "mill" } } }
여기서는 주소에 "mill" 또는 "lane"이라는 용어가 있는 모든 계정을 반환합니다.
GET /bank/_search { "query": { "match": { "address": "mill lane" } } }
이 예는 match
(match_phrase
)의 변형으로 주소에 "mill lane" 문구가 있는 모든 계정을 반환합니다.
GET /bank/_search { "query": { "match_phrase": { "address": "mill lane" } } }
이제 bool
(Boolean) 쿼리에 대해 알아보겠습니다. bool
쿼리에서는 부울 로직을 사용하여 작은 쿼리로 더 큰 쿼리로 만들 수 있습니다.
이 예는 2개의 match
쿼리를 작성하고 주소에 "mill" 및 "lane"이 있는 모든 계정을 반환합니다.
GET /bank/_search { "query": { "bool": { "must": [ { "match": { "address": "mill" } }, { "match": { "address": "lane" } } ] } } }
위 예에서 bool must
절에 지정된 모든 쿼리가 true가 되어야 문서가 일치 항목으로 간주됩니다.
이와 달리 다음 예는 2개의 match
쿼리를 작성하고 주소에 "mill" 또는 "lane"이 있는 모든 계정을 반환합니다.
GET /bank/_search { "query": { "bool": { "should": [ { "match": { "address": "mill" } }, { "match": { "address": "lane" } } ] } } }
위 예에서 bool should
절에 지정된 쿼리 중 하나라도 true가 되면 문서는 일치 항목이 됩니다.
이 예는 2개의 match
쿼리를 작성하고 주소에 "mill" 및 "lane"이 없는 모든 계정을 반환합니다.
GET /bank/_search { "query": { "bool": { "must_not": [ { "match": { "address": "mill" } }, { "match": { "address": "lane" } } ] } } }
위 예에서 bool must_not
절에 지정된 쿼리 중 어느 것도 true가 아닐 때만 문서가 일치 항목이 됩니다.
하나의 bool
쿼리 내에 must
, should
, must_not
절을 동시에 조합할 수 있습니다. 또한 복잡한 다단계 부울 로직처럼 bool
절 내에 bool
쿼리를 작성할 수 있습니다.
이 예는 나이가 40세이지만 ID(아이다호)에 살고 있지 않은 사람의 모든 계정을 반환합니다.
GET /bank/_search { "query": { "bool": { "must": [ { "match": { "age": "40" } } ], "must_not": [ { "match": { "state": "ID" } } ] } } }