Elasticsearch(九)搜索---搜索辅助功能(下)--搜索性能分析

news2024/11/27 14:42:50

一、前言

上篇文章我们学习了ES的搜索辅助功能的一部分–分别是指定搜索返回的字段,搜索结果计数,分页,那么本次我们来学习一下ES的性能分析相关功能。

二、ES性能分析

在使用ES的过程中,有的搜索请求的响应比较慢,大部分原因的是DSL的执行逻辑有问题。ES提供了profile功能,该功能详细地列出例如了搜索时每一个步骤的耗时,可以帮助用户对DSL的性能进行剖析。以下将开启profilefile功能:

GET /hotel/_search
{
  "profile":"true",
 "query": {
    "match": {
        "amenities": "充电"
    }
  }
}

执行以上DSL后ES返回了一段比较冗长的信息,下面是省略一些信息的返回数据:

{
  "took" : 11,
  "timed_out" : false,
  "_shards" : {...},
  "hits" : {...},
  "profile" : {
    "shards" : [
      {
        "id" : "[ER773I31Sx-wJuJwJCh7Ng][hotel][0]",
        "searches" : [
          {
            "query" : [
              { //在amenities搜索"充电",被ES拆分成两个子查询
                "type" : "BooleanQuery",
                "description" : "amenities:充 amenities:电",
                "time_in_nanos" : 2365600,  //match搜索的总耗时
                "breakdown" : {
                  "set_min_competitive_score_count" : 0,
                  "match_count" : 4,  //命中的文档个数
                  "shallow_advance_count" : 0,
                  "set_min_competitive_score" : 0,
                  "next_doc" : 22200,
                  "match" : 4600,
                  "next_doc_count" : 8,
                  "score_count" : 4,  //打分的文档个数
                  "compute_max_score_count" : 0,
                  "compute_max_score" : 0,
                  "advance" : 77800,
                  "advance_count" : 1,
                  "score" : 15600,
                  "build_scorer_count" : 2,
                  "create_weight" : 289900,
                  "shallow_advance" : 0,
                  "create_weight_count" : 1,
                  "build_scorer" : 1955500
                },
                "children" : [   //子查询
                  {  //子查询"amenities:充"
                    "type" : "TermQuery",
                    "description" : "amenities:充",
                    "time_in_nanos" : 125800,  //耗时
                   "breakdown" : {...}
                  },
                  {  //子查询"amenities:电"
                    "type" : "TermQuery",
                    "description" : "amenities:电",
                    "time_in_nanos" : 29000,
                    "breakdown" : {...}
                ]
              }
            ],
            "rewrite_time" : 16500,
            "collector" : [   //ES手机数据性能剖析
              {
                "name" : "SimpleTopScoreDocCollector",
                "reason" : "search_top_hits",
                "time_in_nanos" : 31900  //ES收集数据的耗时
              }
            ]
          }
        ],
        "aggregations" : [ ]  //聚合性能剖析,本次搜索无聚合,因此数据为空
      }
    ]
  }
}

如上所示,在带有profile的返回信息中,除了包含搜索结果外,还包含profile子句,在该子句中展示了搜索过程中各个环节的名称及耗时情况。需要注意的是,使用profile功能是有资源损耗的,建议用户只在前期调试的时候使用该功能,在生产中不要开启profile功能
在java客户端中,我们可以通过SearchSourceBuilder.profile(true)开启profile性能分析。
因为一个搜索可能会跨越多个分片,所以使用shards数组放在profile子句中。每个shard子句中包含3个元素,分别是id、searches和aggregations。

  • id表示分片的唯一标识,它的组成形式为[nodeID][indexName][shardID].
  • searches以数组的形式存在,因为有的搜索请求会跨多个索引进行搜索。每一个search子元素即为在同一个索引中的子查询,此处不仅返回了该search子元素耗时为2365600ns的信息,而且还返回了搜索"充电"的详细策略,即被拆分成"amenities:充"和"amenities:电"两个子查询。同理,children子元素给出了"amenities:充"和"amenities:电"的耗时和详细搜索步骤的耗时,此处不再赘述。
  • aggregations只有在进行聚合运算时才有内容,这个之后学习聚合的时候会再次提及

上面只是一个很简单的例子,如果查询比较复杂或者命中的分片比较多,profile返回的信息将特别冗长。在这种情况下,用户进行性能剖析的效率将非常低。为此,Kibana提供了可视化的profile功能,该功能建立在ES的profile功能基础上。在Kibana的DEV Tools界面中单击Search Profiler链接,就可以使用可视化的profile了,输入刚才在控制台输入的DSL,其区域布局如下图:
在这里插入图片描述

三、ES评分分析

在使用搜索引擎时,一般都会涉及排序功能,如果用户不指定按照某个字段进行升序或者降序排列,那么ES会使用自己的打分算法对文档进行排序。有时我们需要知道某个文档的具体的打分详情,以便于对搜索DSL问题进行排查。ES提供了explain功能来帮助使用者查看搜索时的匹配详情。explain的使用形式如下:

GET /${index_name}/_explain/${doc_id}
{
  "query": {
     ...
  }
}

以下示例为按照标题进行搜索的explain查询请求:

GET /hotel/_explain/002
{
  "query": {
    "match": {
        "amenities": "充电"
    }
  }
}

执行上述explain查询请求后,ES返回信息如下:

{
  "_index" : "hotel",
  "_type" : "_doc",
  "_id" : "002",
  "matched" : true,
  "explanation" : {    //"amenities": "充电"被拆分成两个子查询
    "value" : 0.56802404,
    "description" : "sum of:",
    "details" : [
      {  //子查询"amenities": "充"的具体匹配过程
        "value" : 0.28401202,    
        "description" : "weight(amenities:充 in 6) [PerFieldSimilarity], result of:",
        "details" : [
          {
            "value" : 0.28401202,  //子查询"amenities": "充"的匹配得分
            "description" : "score(freq=1.0), computed as boost * idf * tf from:",
            "details" : [
                  ...,
                  ...,
                  ...
             ]
          }
       ]
     },
      {  //子查询"amenities": "电"的具体匹配过程
        "value" : 0.28401202,
        "description" : "weight(amenities:电 in 6) [PerFieldSimilarity], result of:",
        "details" : [
          {  
            "value" : 0.28401202,  //子查询"amenities": "电"的匹配得分
            "description" : "score(freq=1.0), computed as boost * idf * tf from:",
            "details" : [
                   ...,
                   ...,
                   ...
                ]
              }
            ]
          }
        ]
      }
    ]
  }
}

上面的内容将返回结果省略了,可以看到,explain返回的信息比较全面,关于每一项内容在之后的篇章中会进行讲解。
另外,如果一个文档和查询不匹配,explain也会直接将返回信息告知用户,具体如下:

{
  "_index" : "hotel",  //搜索的索引
  "_type" : "_doc",
  "_id" : "002",
  "matched" : false,   //没有命中的文档
  "explanation" : {
    "value" : 0.0,
    "description" : "no matching term",
    "details" : [ ]   //命中的文档集合为空
  }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/331781.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ChatGPT的火爆出圈,你对它有几分了解?

文章目录1.ChatGPT是什么?2.ChatGPT能做什么?2-1.什么是自然语言模型?3.ChatGPT带来的评价4.了解完ChatGPT之后,你会有什么反思?4-1.为什么微软不自己研发ChatGPT?4-2.Elon Musk为什么退出OpenAI公司&#…

分享116个JS焦点图代码,总有一款适合您

分享116个JS焦点图代码,总有一款适合您 116个JS焦点图代码下载链接:https://pan.baidu.com/s/1BKblAjuE98y5HlLAXZIndQ?pwdphgw 提取码:phgw Python采集代码下载链接:https://wwgn.lanzoul.com/iKGwb0kye3wj import os impo…

全国青少年编程等级考试scratch二级真题2022年9月(含题库答题软件账号)

青少年编程等级考试scratch真题答题考试系统请点击电子学会-全国青少年编程等级考试真题Scratch一级(2019年3月)在线答题_程序猿下山的博客-CSDN博客_小航答题助手1.数列:1,2,3,4,6,…

NLP学习笔记(八) GPT简明介绍

大家好,我是半虹,这篇文章来讲 GPT\text{GPT}GPT (Generative Pre-Training\textbf{G}\text{enerative}\ \textbf{P}\text{re-}\textbf{T}\text{raining}Generative Pre-Training) 实际上,GPT\text{GPT}GPT 包括一系列论文,具体有…

探针台常见的故障及解决方法

症状、 可能原因、 解决方法 移动样品后画面变模糊 —显微镜不垂直,调垂直显微镜 样品台不水平 —调水平样品台 显微镜视场亮度不足,边缘切割或看不到像—转换器不在定位位置上 把转换器转到定位位置上 管镜转盘不在定位位置上 —把管镜转盘转到定…

SpringCloud 中 Config、Bus、Stream、Sleuth

文章目录🚏 第十三章 分布式配置中心🚬 一、Config 概述🚬 二、Config 快速入门🚭 config-server:🛹 1、使用gitee创建远程仓库,上传配置文件🛹 2、导入 config-server 依赖&#x1…

【概念辨析】整型提升的深入理解(手画图解)

整型提升是一个小的知识点,但是请继续学习,保持空杯心态! 目录 文章目录 前言 一、整型提升是什么? 二、发生整型提升的情况 1.字节数比int少的内置类型进行的整型提升 2.整型提升的规则 图解: 总结 前言 整型提升也是…

ubuntu18.04下交叉编译 nginx源码(支持推送H265的rtmp和http-flv)

ubuntu18.04下交叉编译 nginx源码(支持推送H265的rtmp和http-flv)适合在aarch64-linux-gnu平台下的交叉编译一、源码下载准备二、执行configure三、解决执行configure时遇到的出错问题1、checking for C compiler ... found but is not working2、error:…

Vue-第一天 前端工程化与 webpack

前端工程化与 webpack一、前端工程化1. 小白眼中的前端开发 vs 实际的前端开发2. 什么是前端工程化3. 前端工程化的好处4. 前端工程化的解决方案二、webpack 的基本使用1. 什么是 webpack2. 创建列表隔行变色项目3. 在项目中安装 webpack4. 在项目中配置 webpack4.1 mode 的可选…

Homekit智能家居DIY设备-智能通断开关

智能通断器,也叫开关模块,可以非常方便地接入家中原有开关、插座、灯具、电器的线路中,通过手机App或者语音即可控制电路通断,轻松实现原有家居设备的智能化改造。 随着智能家居概念的普及,越来越多的人想将自己的家改…

【微服务】Elasticsearch集群介绍搭建(六)

🚗Es学习第六站~ 🚩Es学习起始站:【微服务】Elasticsearch概述&环境搭建(一) 🚩本文已收录至专栏:微服务探索之旅 👍希望您能有所收获 一.引入 单机的elasticsearch做数据存储,必然面临两个…

暗月内网渗透实战——项目七

首先环境配置 VMware的网络配置图 环境拓扑图 开始渗透 信息收集 使用kali扫描一下靶机的IP地址 靶机IP:192.168.0.114 攻击机IP:192.168.0.109 获取到了ip地址之后,我们扫描一下靶机开放的端口 靶机开放了21,80,999,3389,5985,6588端口…

20、CSS中单位:【px和%】【em和rem】【vw|vh|vmin|vmax】的区别

CSS中的px 和 % px (pixels) 是固定单位,也可以叫基本单位,代表像素,可以确保元素的大小不受屏幕分辨率的影响。 % (percentage) 是相对单位,代表元素大小相对于其父元素或视口(viewport)的大小的百分比。使用百分比可…

linux001之linux系统部署安装

注意:本次安装讲解以乌班图(Ubuntu) 虚拟机来说明讲解,既然学习linux,就无需用图形界面了,直接用服务器版本 1. 下载乌班图 网址:https://www.ubuntu.org.cn/download/server 然后就可以看到右下角有下载提示&#xff…

Scala - Idea 项目报错 Cannot resolve symbol XXX

一.引言 Idea 编译 Scala 项目大面积报错 Cannot resolve symbol xxx。 二.Cannot resolve symbol xxx 1.问题描述 Idea 内的 Scala 工程打开后显示下述异常: 即 Scala 常规语法全部失效,代码出现大面积红色报错。 2.尝试解决方法 A.设置 Main Sourc…

车道线检测-E2E_LSFitting 论文学习笔记

论文:《End-to-end Lane Detection through Differentiable Least-Squares Fitting》 代码:https://github.com/wvangansbeke/LaneDetection_End2End 材料:https://zhuanlan.zhihu.com/p/94419168 特点: 拟合二次曲线&#xff1b…

Kafka安装及zookeeper is not a recognized option问题解决

一安装JAVA JDK(略) 二安装ZooKeeper 下载安装包,建议bin版本 http://zookeeper.apache.org/releases.html#download解压并进入ZooKeeper,将“zoo_sample.cfg”重命名为“zoo.cfg” D:\Kafka\apache-zookeeper-3.7.1-bin\conf…

Python中类和对象(2)

1.继承 Python 的类是支持继承的:它可以使用现有类的所有功能,并在无需重新编写代码的情况下对这些功能进行扩展。 通过继承创建的新类称为 “子类”,被继承的类称为 “父类”、“基类” 或 “超类”。 继承语法是将父类写在子类类名后面的…

相机坐标系的正向投影和反向投影

1 、正向投影: 世界坐标系到像素坐标系 世界3D坐标系(x, y, z) 到图像像素坐标(u,v)的映射过程 (1)世界坐标系到相机坐标系的映射。 两个坐标系的转换比较简单,就是旋转矩阵 平移矩阵,旋转矩阵则是绕X, Y&#xff…

nginx中间件常见漏洞总结

nginx中间件常见漏洞总结1.中间件漏洞的概念1.1 中间件、容器、服务器的基本概念辨析2.Nginx 配置错误导致漏洞2.1 $uri导致的CRLF注入漏洞2.1.1 漏洞成因2.1.2 利用方式2.1.3 修改方案2.2 目录穿越漏洞2.1.1 漏洞成因2.2.2 利用方式2.2.3 修改方案2.3 Http Header被覆盖2.3.1 …