2.X/1. Getting Started

1-07-6. Validating Queries

drscg 2017. 9. 30. 19:54

Queries can become quite complex and, especially when combined with different analyzers and field mappings, can become a bit difficult to follow. The validate-query API can be used to check whether a query is valid.

query는 꽤 복잡해질 수 있고, 특히 다른 analyzer와 field mapping이 조합되었을 경우, 따라 가기가 약간 어려워질 수 있다. validate-query API는 query가 유효한가를 확인하는데 사용된다.

GET /gb/tweet/_validate/query
{
   "query": {
      "tweet" : {
         "match" : "really powerful"
      }
   }
}

The response to the preceding validate request tells us that the query is invalid:

위의 validate request에 대한 response는 query가 유효하지 않다고 말한다.

{
  "valid" :         false,
  "_shards" : {
    "total" :       1,
    "successful" :  1,
    "failed" :      0
  }
}

Understanding Errorsedit

To find out why it is invalid, add the explain parameter to the query string:

왜 유효하지 않은지를 알아내기 위해, query string에 explain 매개변수를 추가하자.

GET /gb/tweet/_validate/query?explain 
{
   "query": {
      "tweet" : {
         "match" : "really powerful"
      }
   }
}

explain flag는 query가 왜 유효하지 않은지에 대한, 더 많은 정보를 제공한다.

Apparently, we’ve mixed up the type of query (match) with the name of the field (tweet):

명백하게, query의 type(match)과 field의 name(tweet)을 혼동한 것이다.

{
  "valid" :     false,
  "_shards" :   { ... },
  "explanations" : [ {
    "index" :   "gb",
    "valid" :   false,
    "error" :   "org.elasticsearch.index.query.QueryParsingException:
                 [gb] No query registered for [tweet]"
  } ]
}

Understanding Queriesedit

Using the explain parameter has the added advantage of returning a human-readable description of the (valid) query, which can be useful for understanding exactly how your query has been interpreted by Elasticsearch:

explain 매개변수를 사용하는 것은, (유효한) query를 사람이 읽을 수 있는 설명으로 반환해 주는, 추가적인 장점이 있다. 그래서 query가 Elasticsearch에 의해 해석되는 방법을, 정확하게 이해하는데 유용하다.

GET /_validate/query?explain
{
   "query": {
      "match" : {
         "tweet" : "really powerful"
      }
   }
}

An explanation is returned for each index that we query, because each index can have different mappings and analyzers:

각 index는 다른 mapping과 analyzer를 가질 수 있기 때문에, explanation 은 query에 대해, 각 index별로 반환한다.

{
  "valid" :         true,
  "_shards" :       { ... },
  "explanations" : [ {
    "index" :       "us",
    "valid" :       true,
    "explanation" : "tweet:really tweet:powerful"
  }, {
    "index" :       "gb",
    "valid" :       true,
    "explanation" : "tweet:realli tweet:power"
  } ]
}

From the explanation, you can see how the match query for the query string really powerful has been rewritten as two single-term queries against the tweet field, one for each term.

explanation 에서, query string really powerful 에 대한 match query가, tweet field에 대해, 두 개의 단일 term query(각 단어당 하나)로 다시 작성되는 방법을 알 수 있다.

Also, for the us index, the two terms are really and powerful, while for the gb index, the terms are realli and power. The reason for this is that we changed the tweet field in the gb index to use theenglish analyzer.

또한, us index에서는 두 개의 단어가 really 와 powerful 이고, 반면에 gb index에서는 단어가 realli와 power 이다. 그 이유는 gb index의 tweet field가 english analyzer를 사용하도록 변경되었기 때문이다.


'2.X > 1. Getting Started' 카테고리의 다른 글

1-07-4. Most Important Queries  (0) 2017.09.30
1-07-5. Combining queries together  (0) 2017.09.30
1-08. Sorting and Relevance  (0) 2017.09.30
1-08-1. Sorting  (0) 2017.09.30
1-08-2. String Sorting and Multifields  (0) 2017.09.30