ElasticSearch中profile API的使用
1. 前言
profile API 是 Elasticsearch 5.x 的一个新接口。通过这个功能,可以看到一个搜索聚合请求,是如何拆分成底层的 Lucene 请求,并且显示每部分的耗时情况。
2. profile API 使用
可以通过在 query 部分上方提供 “profile: true” 来启用Profile API。
GET /ljjtest/book/_search
{
"profile":"true",
"query":{
"match":{
"author":"鲁迅"
}
}
}
3. profile API响应说明
{
"took": 2,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"failed": 0
},
"hits": {
"total": 2,
"max_score": 1.3728157,
"hits": [ ... ]
},
"profile": {
"shards": [
{
"id": "[0mFoaNASRaGO050a_a28gA][ljjtest][0]",
"searches": [
{
"query": [
{
"type": "BooleanQuery",
"description": "author:鲁 author:迅",
"time": "0.5203070000ms",
"time_in_nanos": 520307,
"breakdown": {
"score": 18400,
"build_scorer_count": 1,
"match_count": 0,
"create_weight": 213200,
"next_doc": 28200,
"match": 0,
"create_weight_count": 1,
"next_doc_count": 3,
"score_count": 2,
"build_scorer": 260500,
"advance": 0,
"advance_count": 0
},
"children": [
{
"type": "TermQuery",
"description": "author:鲁",
"time": "0.3040070000ms",
"time_in_nanos": 304007,
"breakdown": {
"score": 9100,
"build_scorer_count": 1,
"match_count": 0,
"create_weight": 118200,
"next_doc": 14500,
"match": 0,
"create_weight_count": 1,
"next_doc_count": 3,
"score_count": 2,
"build_scorer": 162200,
"advance": 0,
"advance_count": 0
}
},
{
"type": "TermQuery",
"description": "author:迅",
"time": "0.1005070000ms",
"time_in_nanos": 100507,
"breakdown": {
"score": 2600,
"build_scorer_count": 1,
"match_count": 0,
"create_weight": 63500,
"next_doc": 2200,
"match": 0,
"create_weight_count": 1,
"next_doc_count": 3,
"score_count": 2,
"build_scorer": 32200,
"advance": 0,
"advance_count": 0
}
}
]
}
],
"rewrite_time": 327100,
"collector": [
{
"name": "CancellableCollector",
"reason": "search_cancelled",
"time": "0.04830000000ms",
"time_in_nanos": 48300,
"children": [
{
"name": "SimpleTopScoreDocCollector",
"reason": "search_top_hits",
"time": "0.03680000000ms",
"time_in_nanos": 36800
}
]
}
]
}
],
"aggregations": []
}
]
}
}
Profile API响应说明:
上面的响应显示的是单个分片。每个分片都被分配一个唯一的ID,ID的格式是[nodeID][indexName][shardID]。现在在"shards"数组里还有另外三个元素,它们是:
- query
- rewrrite_time
- collector
Query
Query 段由构成Query的元素以及它们的时间信息组成。Profile API结果中Query 部分的基本组成是:
type—— 它向我们显示了哪种类型的查询被触发。此处是布尔值。因为多个关键字匹配查询被分成两个布尔查询。description—— 该字段显示启动查询的lucene方法。这里是"author:鲁 author:迅"time—— lucene 执行此查询所用的时间。单位是毫秒。time_in_nanos—— lucene 执行此查询所用的时间。单位是微秒。breakdown—— 有关查询的更详细的细节,主要与lucene参数有关。children—— 具有多个关键字的查询被拆分成相应术语的布尔查询,每个查询都作为单独的查询来执行。每个子查询的详细信息将填充到Profile API输出的子段中。在上面的章节中,可以看到第一个子元素查询是"鲁",下面给出查询时间和其他breakdown参数等详细信息。同样,对于第二个关键字,有一个名为"迅"的子元素具有与其兄弟相同的信息。从查询中的子段中,我们可以得到关于哪个搜索项在总体搜索中造成最大延迟的信息。
Rewrite Time
由于多个关键字会分解以创建个别查询,所以在这个过程中肯定会花费一些时间。将查询重写一个或多个组合查询的时间被称为“重写时间”。(以纳秒为单位)。
Collectors
在Lucene中,收集器是负责收集原始结果,收集和组合结果,执行结果排序等的过程。例如,在上面的执行的查询中,当查询语句中给出size:0时,使用的收集器是"totalHitCountCollector"。这只返回搜索结果的数量(search_count),不返回文档。此外,收集者所用的时间也一起给出了。
参考:https://it.baiked.com/elasticsearch/1795.html
</div>
ElasticSearch中profile API的使用的更多相关文章
- elasticsearch中的API
elasticsearch中的API es中的API按照大类分为下面几种: 文档API: 提供对文档的增删改查操作 搜索API: 提供对文档进行某个字段的查询 索引API: 提供对索引进行操作 查看A ...
- Elasticsearch中JAVA API的使用
1.Elasticsearch中Java API的简介 Elasticsearch 的Java API 提供了非常便捷的方法来索引和查询数据等. 通过添加jar包,不需要编写HTTP层的代码就可以开始 ...
- ElasticSearch中辅助API常用用法详解
本篇是使用Elasticsearch必不可少的必备知识,并且适用于所有的Rest Api. 返回数据格式化 当在Rest请求后面添加?pretty时,结果会以Json格式化的方式显示.另外,如果添加? ...
- ElasticSearch 中 REST API 详解
本文主要内容: 1 ElasticSearch常用的操作 2 ElasticSearchbulk命令 ES REST API elasticsearch支持多种通讯,其中包括http请求响应服务,因此 ...
- elasticsearch中常用的API
elasticsearch中常用的API分类如下: 文档API: 提供对文档的增删改查操作 搜索API: 提供对文档进行某个字段的查询 索引API: 提供对索引进行操作,查看索引信息等 查看API: ...
- Elasticsearch中提升大文件检索性能的一些总结
笔者在实际生产环境中经常遇到一些大文件的检索,例如一些书籍内容,PDF文件等.今天这篇博客主要来探讨下如何提升ES在检索大文件的一些性能,经验有限,算是一个小小的总结吧! 1.大文件是多大? E ...
- 如何在Elasticsearch中安装中文分词器(IK+pinyin)
如果直接使用Elasticsearch的朋友在处理中文内容的搜索时,肯定会遇到很尴尬的问题--中文词语被分成了一个一个的汉字,当用Kibana作图的时候,按照term来分组,结果一个汉字被分成了一组. ...
- ES 15 - Elasticsearch中的数据类型 (text、keyword、date、geo等)
目录 1 核心数据类型 1.1 字符串类型 - string(不再支持) 1.1.1 文本类型 - text 1.1.2 关键字类型 - keyword 1.2 数字类型 - 8种 1.3 日期类型 ...
- 从App业务逻辑中提炼API接口
2.1 从App业务逻辑中提炼API接口 业务逻辑思维导图 功能-业务逻辑思维导图 基本功能模块关系 功能模块接口UML(设计出API) 在设计稿标注API 编写API文档 2.2 设计API的要点 ...
随机推荐
- ubuntu下C程序的编辑、编译、运行
均以hello world程序为例 一.vim hello.c/hello.cpp 创建hello.c/hello.cpp文件,并进入vim界面 二.此时按键盘上的很多键均不会有任何反应,键入i,进入 ...
- C# Socket 您的主机中的软件中止了一个已建立的连接 An established connection was aborted by the software in your host machine
http://tieba.baidu.com/p/3223234493 问题: 服务端在接收客户端数据的时候,抛了个异常出来:System.Net.Sockets.SocketException: 您 ...
- C# SuperWebSocket服务端学习(二)
首先需要下载DLL类库 地址详见:http://download.csdn.NET/detail/u011269801/9590935 1,打开VS2012,新建一个控制台应用程序,选择.NET4. ...
- hdu 2205(容斥原理)
Eddy's爱好 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Su ...
- 自适应阈值分割—大津法(OTSU算法)C++实现
大津法是一种图像灰度自适应的阈值分割算法,是1979年由日本学者大津提出,并由他的名字命名的.大津法按照图像上灰度值的分布,将图像分成背景和前景两部分看待,前景就是我们要按照阈值分割出来的部分.背景和 ...
- centos的vsftp修改上传下载速度
比如你想限制本地用户的上传速度和下载速度为1MB/s,则在vsftpd.conf中添加以下内容:local_max_rate = 1048576 ※ 默认单位是Byte/s
- html5 历史管理
1.onhashchange:改变hash值来进行历史管理. <!DOCTYPE html> <html> <head> <meta charset=&quo ...
- go的语言结构
一.文件名.关键字与标识符 1.1 文件名 1.go 的源文件已 .go 为后缀名 2.文件名已小写组成 如:simple.go 3.如多个部分组成可用"_" 分割 4.不要包含有 ...
- java.util.Arrays
package com.etc.Arrays; import java.util.Arrays; public class TestArraysClass { public static void m ...
- SQLServer 里的三种条件判断的用法:Where GroupBy Having
HAVING 子句对 GROUP BY 子句设置条件的方式与 WHERE 子句和 SELECT 语句交互的方式类似.WHERE 子句搜索条件在进行分组操作之前应用:而 HAVING 搜索条件在进行分组 ...