The most basic form of the search API is the empty search, which doesn’t specify any query but simply returns all documents in all indices in the cluster:
search API의 가장 기본적인 형태는, 어떤 query도 지정하지 않은, empty search 이다. cluster에 있는 모든 indices의 모든 document가 반환된다.
GET /_search
The response (edited for brevity) looks something like this:
response를 요약하면, 아래와 같다.
{ "hits" : { "total" : 14, "hits" : [ { "_index": "us", "_type": "tweet", "_id": "7", "_score": 1, "_source": { "date": "2014-09-17", "name": "John Smith", "tweet": "The Query DSL is really powerful and flexible", "user_id": 2 } }, ... 9 RESULTS REMOVED ... ], "max_score" : 1 }, "took" : 4, "_shards" : { "failed" : 0, "successful" : 10, "total" : 10 }, "timed_out" : false }
hitsedit
The most important section of the response is hits
, which contains the total
number of documents that matched our query, and a hits
array containing the first 10 of those matching documents—the results.
response에서 가장 중요한 부분은 hits
이다. 여기에는 query에 일치하는 모든 document의 수, total
이 포함되어 있고, hits
배열에는 일치하는 document(결과)의 첫 번째 10개가 포함되어 있다.
Each result in the hits
array contains the _index
, _type
, and _id
of the document, plus the _source
field. This means that the whole document is immediately available to us directly from the search results. This is unlike other search engines, which return just the document ID, requiring you to fetch the document itself in a separate step.
hits
배열의 각 결과에는 document의 _index
, _type
, _id
를 포함하고 있고, 더하여 _source
field가 있다. 즉, 검색 결과로부터 나온 전체 document를 즉시 이용할 수 있다. 이것이 단지 document id를 돌려주고, 별도의 단계에서 document 자체를 가져와야 하는 다른 검색 엔진과 다른 점이다.
Each element also has a _score
. This is the relevance score, which is a measure of how well the document matches the query. By default, results are returned with the most relevant documents first; that is, in descending order of _score
. In this case, we didn’t specify any query, so all documents are equally relevant, hence the neutral _score
of 1
for all results.
각 요소는 _score
를 가진다. 이를 relevance score 라 하는데, document가 query와 얼마나 많이 관련있는가를 나타내는 척도이다. 기본적으로, 결과는 _score
의 역순으로, 가장 관련 있는 document를 먼저 반환한다. 이 경우에는, 어떤 query도 지정하지 않았기 때문에, 모든 document의 관련성이 동일하다. 따라서, 모든 결과가 기본 _score
1
을 가진다.
The max_score
value is the highest _score
of any document that matches our query.
tookedit
The took
value tells us how many milliseconds the entire search request took to execute.
shardsedit
The _shards
element tells us the total
number of shards that were involved in the query and, of them, how many were successful
and how many failed
. We wouldn’t normally expect shards to fail, but it can happen. If we were to suffer a major disaster in which we lost both the primary and the replica copy of the same shard, there would be no copies of that shard available to respond to search requests. In this case, Elasticsearch would report the shard as failed
, but continue to return results from the remaining shards.
_shards
요소는 query에 참여했던 shard의 총(total)
수, 성공한(successful)
shard 수, 실패한(failed)
shard 수를 알려준다. 일반적으로 shard가 실패하지는 않을 것이다. 하지만 발생할 수 있다. 동일한 shard의 primary와 replica 복사본을 모두 잃어버리는 재난을 당했다면, 검색 request에 response할 수 있는 shard의 복사본은 없을 것이다. 이런 경우에 Elasticsearch는 실패한(failed)
shard로 보고한다. 그러나 남아 있는 shard로부터 결과를 반환하는 것은 계속한다.
timeoutedit
The timed_out
value tells us whether the query timed out. By default, search requests do not time out. If low response times are more important to you than complete results, you can specify a timeout
as 10
or 10ms
(10 milliseconds), or 1s
(1 second):
time_out
값은 query의 time out 여부를 알려준다. 기본적으로, 검색 request는 timeout되지 않는다. 만약 전체 결과보다 빠른 response 시간이 중요하다면, 10
또는 10ms
(milliseconds) 또는 1s
(second)로 timeout을 지정할 수 있다.
GET /_search?timeout=10ms
Elasticsearch will return any results that it has managed to gather from each shard before the requests timed out.
Elasticsearch는 request가 timeout 되기 전에, 각 shard에서 수집한 결과를 반환한다.
It should be noted that this timeout
does not halt the execution of the query; it merely tells the coordinating node to return the results collected so far and to close the connection. In the background, other shards may still be processing the query even though results have been sent.
timeout
이 query의 실행을 중단시키는 것은 아니라는 점을 알아 두자. 단순히, 지금까지 수집한 결과를 coordinating node에게 반환하고, 연결을 종료한다. 비록 결과는 보내졌지만, background에서, 다른 shard는 여전히 query를 실행 중일 수 있다.
Use the time-out because it is important to your SLA, not because you want to abort the execution of long-running queries.
오랫동안 실행되는 query의 실행을 중단시키기 위해서가 아니라, SLA가 매우 중요하기 때문에, timeout을 사용한다.
'2.X > 1. Getting Started' 카테고리의 다른 글
1-04-6. Multidocument Patterns (0) | 2017.09.30 |
---|---|
1-05. Searching—The Basic Tools (0) | 2017.09.30 |
1-05-2. Multi-index, Multitype (0) | 2017.09.30 |
1-05-3. Pagination (0) | 2017.09.30 |
1-05-4. Search Lite (0) | 2017.09.30 |