18. Exploring Your Data - Executing Searches :: 2015/04/22 17:06

[Executing Searches]

지금까지 우리는 가지 기본적인 검색 파라미터들을 살펴보았다. 이제 Query DSL 대해서 깊이 파고 들어가 보자. 첫번째로 리턴되는 document 필드들을 살펴보자. 기본적으로 전체 JSON document 모든 검색의 일부로 리턴된다. 이것은 source (검색 결과에서 _source 필드에 해당함) 참조한다. 만약 전체 source document 리턴을 원치 않으면 리턴되는 source내의 몇가지 필드만 요청할 수도 있다.


다음 예제는 _source내의 2가지 필드 - account_number, balance - 만을 검색으로부터 어떻게 리턴 받는지를 보여준다.


curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
{
  "query": { "match_all": {} },
  "_source": ["account_number", "balance"]
}'


위의 예제에서 간단하게 _source 필드를 감소시켰음을 주목하라. 검색 결과는 여전히 _source 필드 하나를 리턴하겠지만, 내에는 account_number, balance 포함되어 있다.


SQL 배경지식이 있다면, 위의 예제는 SQL SELECT [필드 리스트] FROM…. 개념과 유사하다.


이제 query 파트로 이동해서 살펴보자. 앞전에 매칭되는 모든 document 검색하는데 사용하는 match_all query 살펴보았다. 이제 기본적인 field 지정 검색 query match query라고 불리는 새로운 query 대해서 살펴보자. (특정 필드나 여러 필드에 대해서 검색 가능)


다음 예제는 20개의 account_number 리턴한다.


curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
{
  "query": { "match": { "account_number": 20 } }
}'


다음 예제는 address "mill" 포함하고 있는 account들을 리턴한다.
 

curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
{
  "query": { "match": { "address": "mill" } }
}'


다음 예제는 address "mill"이나 "lane" 포함되어 있는 account들을 리턴한다.


curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
{
  "query": { "match": { "address": "mill lane" } }
}'


다음 예제는 address "mill lane" 절구가 포함되어 있는 모든 account들을 리턴한다.


curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
{
  "query": { "match_phrase": { "address": "mill lane" } }
}'


이제 bool query 대해서 살펴 보자. Bool query  boolean logic 이용하여 query 작은 query들을 조합할 있다.


다음 예제는 2개의 match query 조합하여 address "mill", "lane" 모두 포함하고 있는 account 리턴한다.


curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
{
  "query": {
   "bool": {
     "must": [
       { "match": { "address": "mill" } },
       { "match": { "address": "lane" } }
     ]
   }
  }
}'


위의 예제에서 보면, bool must절은 query match 대상이 되는 document 모두 true이어야 함을 의미한다.

반대로, 다음 예제에서는 2개의 match 중에 하나만 true이면 된다.


curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
{
  "query": {
   "bool": {
     "should": [
       { "match": { "address": "mill" } },
       { "match": { "address": "lane" } }
     ]
   }
  }
}'


위의 예제에서 bool should query match 대상이 되는 document true 결과들의 모음이다.

( 중에 하나만 true 경우의 결과를 모두 취합한 것과 같다)


다음 예제는 2개의 match query 결합하여 address "mill" "lane" 모두 없는 account들에 대한 결과를 리턴한다.


curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
{
  "query": {
   "bool": {
     "must_not": [
       { "match": { "address": "mill" } },
       { "match": { "address": "lane" } }
     ]
   }
  }
}'


위의 예제에서 bool must_not 구절은 match 대상 document true 없는 리스트를 리턴한다.

Bool query 내에 must, should, must_not 구절을 동시에 조합할 있다.

더욱이 bool 구절 내에 multi-level boolean logic 가지는 복잡한 bool query 구성할 수도 있다.


다음 예제는 40, Live하지 않은 ID 가진 모든 account 리턴한다.


curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
{
  "query": {
   "bool": {
     "must": [
       { "match": { "age": "40" } }
     ],
     "must_not": [
       { "match": { "state": "ID" } }
     ]
   }
  }
}'

2015/04/22 17:06 2015/04/22 17:06
Trackback Address :: http://www.yongbi.net/trackback/702
[로그인][오픈아이디란?]
오픈아이디로만 댓글을 남길 수 있습니다
Name
Password
Homepage

Secret
< PREV |  1  |  ...  100  |  101  |  102  |  103  |  104  |  105  |  106  |  107  |  108  |  ...  566  |  NEXT >