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
매개변수를 추가하자.
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 |