写点什么

Elasticsearch 搜索结果解析

用户头像
escray
关注
发布于: 2021 年 02 月 05 日
Elasticsearch 搜索结果解析

中文内容来自 B 站中华石杉 Elasticsearch 高手进阶课程,英文内容来自 Elastic 官方文档

搜索元数据


在 Elasticsearch 发出一个搜索请求的话,会拿到一堆搜索结果,我们来看一下这个搜索结果里的各种元数据,都代表了什么含义


GET /<target>/_searchGET /_search
POST /<target>/_searchPOST /_search
复制代码


<target>


(Optional, string) Comma-separated list of data streams, indices, and index aliases to search. Wildcard (*) expressions are supported.


To search all data streams and indices in a cluster, omit this parameter or use _all or *.


为什么会有 POST 方法?在阿里云上执行了一下,结果似乎和 GET 没有什么不同。



GET /_search
{ "took" : 23, "timed_out" : false, "_shards" : { "total" : 29, "successful" : 29, "skipped" : 0, "failed" : 0 }, "hits" : { "total" : { "value" : 10000, "relation" : "gte" }, "max_score" : 1.0, "hits" : [ { "_index" : ".kibana_1", "_type" : "_doc", "_id" : "space:default",...
复制代码


  • took:整个搜索请求花费了多少毫秒

  • hits.total:本次搜索,返回了几条结果

  • hits.max_score:本次搜索的所有结果中,最大的相关度分数是多少,每一条 document 对于 search 的相关度,越相关,_score 分数越大,排位越靠前

  • hits.hits:默认查询前 10 条数据,完整数据,_score 降序排序

  • shards:shards fail 的条件(primary 和 replica 全部挂掉),不影响其他 shard。默认情况下来说,一个搜索请求,会打到一个 index 的所有 primary shard 上去,当然了,每个 primary shard 都可能会有一个或多个 replic shard,所以请求也可以到 primary shard 的其中一个 replica shard 上去。

  • timeout:默认无 timeout,latency 平衡 completeness,手动指定 timeout,timeout 查询执行机制


Response body


took


(integer) Milliseconds it took Elasticsearch to execute the request.


This value is calculated by measuring the time elapsed between receipt of a request on the coordinating node and the time at which the coordinating node is ready to send the response.


Took time includes:


  • Communication time between the coordinating node and data nodes

  • Time the request spends in the search thread pool, queued for execution

  • Actual execution time


Took time does not include:


  • Time needed to send the request to Elasticsearch

  • Time needed to serialize the JSON response

  • Time needed to send the response to a client


timed_out


(Boolean) If true, the request timed out before completion; returned results may be partial or empty.


搜索的 timeout 机制


Request body


timeout


(Optional, time units) Specifies the period of time to wait for a response. If no response is received before the timeout expires, the request fails and returns an error. Defaults to no timeout.


一般情况下,默认是没有 timeout 设置的,如果搜索很慢,每个 Shard 都需要运行好几分钟才能查询出所有的结果,那么搜索请求也会等待好几分钟之后才会返回。


有些搜索应用,对于响应时间是比较敏感的,比如电商网站,如果让用户等 10 分钟,那么用户就会流失掉,不来买东西了。


Elasticsearch 的 timeout 机制,指定每个 Shard 只能在 timeout 设定的时间范围内,将搜索到的全部或部分数据,直接返回给 client 程序,而不是等所有的数据全部都搜索出来之后再返回。


这样可以确保一次搜索请求可以在用户指定的 timeout 时长内完成,在用户的容忍范围之内,为那些对时间敏感的搜索应用提供良好的支持。


timeout=10ms,timeout=1s,timeout=1m


GET /_search?timeout=3ms
复制代码


我在阿里云上执行了一下,发现似乎对于结果没有什么影响,当然也可能是因为数据量不够大,查询不是很复杂的缘故。


发布于: 2021 年 02 月 05 日阅读数: 18
用户头像

escray

关注

Let's Go 2017.11.19 加入

在学 Elasticsearch 的项目经理

评论

发布
暂无评论
Elasticsearch 搜索结果解析