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的使用的更多相关文章

  1. elasticsearch中的API

    elasticsearch中的API es中的API按照大类分为下面几种: 文档API: 提供对文档的增删改查操作 搜索API: 提供对文档进行某个字段的查询 索引API: 提供对索引进行操作 查看A ...

  2. Elasticsearch中JAVA API的使用

    1.Elasticsearch中Java API的简介 Elasticsearch 的Java API 提供了非常便捷的方法来索引和查询数据等. 通过添加jar包,不需要编写HTTP层的代码就可以开始 ...

  3. ElasticSearch中辅助API常用用法详解

    本篇是使用Elasticsearch必不可少的必备知识,并且适用于所有的Rest Api. 返回数据格式化 当在Rest请求后面添加?pretty时,结果会以Json格式化的方式显示.另外,如果添加? ...

  4. ElasticSearch 中 REST API 详解

    本文主要内容: 1 ElasticSearch常用的操作 2 ElasticSearchbulk命令 ES REST API elasticsearch支持多种通讯,其中包括http请求响应服务,因此 ...

  5. elasticsearch中常用的API

    elasticsearch中常用的API分类如下: 文档API: 提供对文档的增删改查操作 搜索API: 提供对文档进行某个字段的查询 索引API: 提供对索引进行操作,查看索引信息等 查看API: ...

  6. Elasticsearch中提升大文件检索性能的一些总结

       笔者在实际生产环境中经常遇到一些大文件的检索,例如一些书籍内容,PDF文件等.今天这篇博客主要来探讨下如何提升ES在检索大文件的一些性能,经验有限,算是一个小小的总结吧! 1.大文件是多大? E ...

  7. 如何在Elasticsearch中安装中文分词器(IK+pinyin)

    如果直接使用Elasticsearch的朋友在处理中文内容的搜索时,肯定会遇到很尴尬的问题--中文词语被分成了一个一个的汉字,当用Kibana作图的时候,按照term来分组,结果一个汉字被分成了一组. ...

  8. ES 15 - Elasticsearch中的数据类型 (text、keyword、date、geo等)

    目录 1 核心数据类型 1.1 字符串类型 - string(不再支持) 1.1.1 文本类型 - text 1.1.2 关键字类型 - keyword 1.2 数字类型 - 8种 1.3 日期类型 ...

  9. 从App业务逻辑中提炼API接口

    2.1 从App业务逻辑中提炼API接口 业务逻辑思维导图 功能-业务逻辑思维导图 基本功能模块关系 功能模块接口UML(设计出API) 在设计稿标注API 编写API文档 2.2 设计API的要点 ...

随机推荐

  1. Git是什么?

    Git是目前世界上最先进的分布式版本控制系统(没有之一). Git有什么特点?简单来说就是:高端大气上档次! 那什么是版本控制系统? 如果你用Microsoft Word写过长篇大论,那你一定有这样的 ...

  2. 阿里云 Docker-registry 搭建

    阿里云 仓库地址: https://cr.console.aliyun.com/cn-hangzhou/instances/images

  3. spring:按照Bean的名称自动装配User

    本实例将介绍如何按照Bean 的名称自动装配 User 对象! <bean> 元素的 autowire 属性负责自动装配 <bean> 标签,定义 JavaBean 的属性.这 ...

  4. poj3926

    dp+优化 很明显可以用单调队列优化. 记录下自己犯的sb错误:  数组开小,sum没搞清... #include<cstdio> #include<cstring> usin ...

  5. XML案例(使用DOM4J解析XML文档)

    1.Demo1.java package cn.itcast.dom4j; import java.io.File;import java.io.FileOutputStream;import jav ...

  6. E20170815-mk

    frame  n. 框架; 边框; 眼镜框; 组织;

  7. Python简介和基础入门

    1.1 Python是什么 相信混迹IT界的很多朋友都知道,Python是近年来最火的一个热点,没有之一.从性质上来讲它和我们熟知的C.java.php等没有什么本质的区别,也是一种开发语言,而且已经 ...

  8. 题解报告:hdu 1850 Being a Good Boy in Spring Festival(尼姆博弈)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1850 Problem Description 一年在外 父母时刻牵挂春节回家 你能做几天好孩子吗寒假里 ...

  9. B - Helpful Maths

    Problem description Xenia the beginner mathematician is a third year student at elementary school. S ...

  10. 猜拳游戏项目(涉及知识点Scanner、Random、For、数组、Break、Continue等)

    package day03.d3.xunhuankongzhi; import java.util.Scanner; public class CaiQuan { public static void ...