Elasticsearch简单搜索以及聚合分析

news/2024/3/28 23:07:20/文章来源:https://blog.csdn.net/qq_36594703/article/details/130327515

1.批量索引文档

如果你有大量文档要索引,你能通过批量 APIbulk API) 来批量提交它们。批量文档操作比单独提交请求显著更快,因为它极简了网络往返。

最佳的批量数量取决于许多因素:文档的大小和复杂度、索引和搜索的负载以及集群可用资源。一种好的方式是批量处理 1,000 到 5,000 个文档,且总负载在 5 MB 到 15 MB。基于这个,你能尝试找到最佳的方式。

向 Elasticsearch 导入一些数据,你就能开始搜索和分析:

1.1 下载 accounts.json (opens new window)示例数据集。这个随机生成的数据集文档表示具体以下信息的用户账户:

1.2  使用以下的 _bulk 请求将账户数据索引到银行(bank) 索引中:

curl -H "Content-Type: application/json" -XPOST "localhost:9200/bank/_bulk?pretty&refresh" --data-binary "@accounts.json"
curl "localhost:9200/_cat/indices?v=true"

2. 开始搜索

例如,以下请求获取按账号排序的银行(bank)索引中的所有文档:

GET /bank/_search
{"query": { "match_all": {} },"sort": [{ "account_number": "asc" }]
}

默认情况下,响应的命中部分(hits section)包含符合搜索条件的前10个文档:

{"took" : 63,"timed_out" : false,"_shards" : {"total" : 5,"successful" : 5,"skipped" : 0,"failed" : 0},"hits" : {"total" : {"value": 1000,"relation": "eq"},"max_score" : null,"hits" : [ {"_index" : "bank","_type" : "_doc","_id" : "0","sort": [0],"_score" : null,"_source" : {"account_number":0,"balance":16623,"firstname":"Bradshaw","lastname":"Mckenzie","age":29,"gender":"F","address":"244 Columbus Place","employer":"Euron","email":"bradshawmckenzie@euron.com","city":"Hobucken","state":"CO"}}, {"_index" : "bank","_type" : "_doc","_id" : "1","sort": [1],"_score" : null,"_source" : {"account_number":1,"balance":39225,"firstname":"Amber","lastname":"Duke","age":32,"gender":"M","address":"880 Holmes Lane","employer":"Pyrami","email":"amberduke@pyrami.com","city":"Brogan","state":"IL"}}, ...]}
}

这个响应也提供关于搜索请求的以下信息:

  • took —— Elasticsearch 执行查询的耗时(毫秒)
  • timed_out —— 搜索请求是否超时
  • _shards —— 多少分片被搜索,以及成功、失败或跳过的分片详情
  • max_score —— 查找到的最相关的文档分数
  • hits.total.value —— 查找到匹配文档数量
  • hits.sort —— 文档的排序位置(不按相关分数排序时)
  • hits._score —— 文档的相关分数(不适用于使用 match_all

每个搜索请求都是独立的:Elasticsearch 不在请求间维护任何状态信息。在请求中指定 from 和 size 参数用来分页浏览搜索结果。

例如,以下请求获取 10 到 19 的结果:

GET /bank/_search
{"query": { "match_all": {} },"sort": [{ "account_number": "asc" }],"from": 10,"size": 10
}

现在你已看到如何提交基本查询请求,你可以开始构造比 match_all 更有趣的查询。

为了在字段中搜索指定词语,你可以使用匹配查询。例如,以下的查询搜索地址(address)字段,用以查找地址包含 mill 或 lane的客户:

GET /bank/_search
{"query": { "match": { "address": "mill lane" } }
}

为了执行短语搜索而不是匹配单独的词语,你可以使用 match_phrase 替代 match。例如,以下请求只匹配包含短语 mill lane 的地址:

GET /bank/_search
{"query": { "match_phrase": { "address": "mill lane" } }
}

为了构造更复杂的查询,你可以使用包含多个查询条件的 bool 的查询。你可以按必须的(必须匹配)、可选的(应该匹配)或者不必的(必须不匹配)来指定条件。

例如,以下请求搜索银行(bank)索引中属于 40 岁客户的账号,但排除其中住在爱达荷州(ID)的人:

GET /bank/_search
{"query": {"bool": {"must": [{ "match": { "age": "40" } }],"must_not": [{ "match": { "state": "ID" } }]}}
}

布尔查询中的每个 mustshould 和 must_not 都称为查询子句。文档满足每个 must 或 should 条件子句的程度,有助于文档相关性的分数。分数越高,文档越符合你的搜索条件。默认情况下,Elasticsearch 返回按相关性分数排序的文档。

must_not 子句中的条件被认作过滤器。它影响文档是否包含在结果中,但不影响文档分数。你可以显式地指定任意的过滤器,用来包含或排除基于结构化数据的文档。

例如,以下请求使用范围过滤器用以限定结果中账户余额在 $20,000 和 $30,000(含)之间。3

GET /bank/_search
{"query": {"bool": {"must": { "match_all": {} },"filter": {"range": {"balance": {"gte": 20000,"lte": 30000}}}}}
}

3. 使用聚合分析结果 

例如,以下的请求使用一个词语聚合分组在银行(bank)索引中按州对所有账户分组,并按降序返回账户最多的十个州:

GET /bank/_search
{"size": 0,"aggs": {"group_by_state": {"terms": {"field": "state.keyword"}}}
}

响应中的桶(bucket)是州(state)字段的值。doc_count 显示每个州的账户数量。例如,你可以看到 ID(爱达荷州)有 27 个账户。由于这个请求设置 size=0,这个请求只包含聚合结果。

{"took": 29,"timed_out": false,"_shards": {"total": 5,"successful": 5,"skipped" : 0,"failed": 0},"hits" : {"total" : {"value": 1000,"relation": "eq"},"max_score" : null,"hits" : [ ]},"aggregations" : {"group_by_state" : {"doc_count_error_upper_bound": 20,"sum_other_doc_count": 770,"buckets" : [ {"key" : "ID","doc_count" : 27}, {"key" : "TX","doc_count" : 27}, {"key" : "AL","doc_count" : 25}, {"key" : "MD","doc_count" : 25}, {"key" : "TN","doc_count" : 23}, {"key" : "MA","doc_count" : 21}, {"key" : "NC","doc_count" : 21}, {"key" : "ND","doc_count" : 21}, {"key" : "ME","doc_count" : 20}, {"key" : "MO","doc_count" : 20} ]}}
}

你可以合并聚合来构建更复杂的数据摘要。例如,以下请求在前一个按州分组(group_by_state)聚合嵌套一个 avg 聚合,以计算每个州的平均账户余额。

GET /bank/_search
{"size": 0,"aggs": {"group_by_state": {"terms": {"field": "state.keyword"},"aggs": {"average_balance": {"avg": {"field": "balance"}}}}}
}

你可以使用嵌套聚合结果进行排序(通过指定词语聚合顺序),而不是按计数结果进行排序:

GET /bank/_search
{"size": 0,"aggs": {"group_by_state": {"terms": {"field": "state.keyword","order": {"average_balance": "desc"}},"aggs": {"average_balance": {"avg": {"field": "balance"}}}}}
}

除了这些基本的桶和度量聚合外,Elasticsearch 提供了特定的聚合用于操作多个字段和分析特定类型数据,如日期、IP 地址以及地理数据。你还可以将单个聚合的结果输入管道聚合用于进一步的分析。

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

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据治理与数据中台架构

随着工业 4.0 时代的到来,传统行业的数字化转型是大势所趋;将数据提高到数据要素层面,让传统的技术在新的场景下发挥出新的作用,是近期研究和探讨的焦点话题。数语科技支持和服务传统行业多年,聚焦于传统数据建模和数据…

catkin_make_workspace

ERROR1 : CMake Error at /opt/ros/melodic/share/cv_bridge/cmake/cv_bridgeConfig.cmake:113 (message): Project ‘cv_bridge’ specifies ‘/usr/include/opencv’ as an include dir, which is not found. It does neither exist as an absolute directory nor in ‘${{pr…

.net6 core web项目发布部署到Linux,以守护进程服务的形式部署启动,nginx实现转发

一、发布项目 1、以文件夹形式 2、目标运行时选对应的平台(Linux-x64) 3、文件夹选项:在发布前删除所有现有文件 二、部署项目(安装.net6环境:参考Linux安装 dotnet sdk 6.0) (1)…

网络基础,InetAddress,Socket,TCP,UDP

概念:两台设备之间通过网络实现数据运输网络通信:将数据通过网络从一台设备传输到另一台设备java.net包下提供了一系列的类或接口,供程序员使用,完成网络通信网络:两台或多台设备通过一定物理设备连接起来构成了网络根…

Scala中的Map 集合详解

目录 一、不可变长Map集合 1.map的声明与遍历 2.map的常用方法:get、getOrElse、keys、values、、: 二、可变长Map集合 三、Map的其他方法 key -> value 的语法形式实际上是用库中的隐式转换实现的,实际调用了 Map.apply 方法。Map.a…

盘点并发编程的12种业务场景,面试别再说你不会并发了

前言 并发编程是一项非常重要的技术,无论在面试,还是工作中出现的频率非常高。 并发编程说白了就是多线程编程,但多线程一定比单线程效率更高? 答:不一定,要看具体业务场景。 毕竟如果使用了多线程&…

力扣sql中等篇练习(十一)

力扣sql中等篇练习(十一) 1 好友申请|| :谁有最多的好友 1.1 题目内容 1.1.1 基本题目信息 1.1.2 示例输入输出 1.2 示例sql语句 # 出现数字次数越多,就代表它的好友越多 # 对两列数据合并时 不取出合并数据,采用UNION ALL SELECT t1.id,count(*) num FROM (SELECT request…

FreeRTOS - 计数信号量

一.任务功能 1、修改按键功能,模拟停车位出入功能 2、当按键按下 获取车位 3、当按键抬起 释放车位 二.API接口 函数原型SemaphoreHandle_t xSemaphoreCreateCounting( ①UBaseType_t uxMaxCount,②UBaseType_t uxInitialCount );功能概述创建计数信号量&#xff0c…

玩转ChatGPT:辅助编程

一、写在前面 首先让小Chat介绍自己在编程方面的天赋: 总结起来:TA掌握了海量的编程知识,能做到自动代码生成、代码审查优化、编程教学辅导以及实时问题解答。我问TA学习了多少案例,TA说:忘了,但保证够用。…

【Transformer系列(4)】Transformer模型结构超详细解读

前言 前一篇我们一起读了Transformer的论文《Attention Is All You Need》,不知道大家是否真的理解这个传说中的神(反正俺是没有~) 这两天我又看了一些视频讲解,感谢各位大佬的解读,让我通透了不少。 这篇文章就和…

语音交友app开发中的用户积分系统

引言 在当今数字时代,语音交友app已成为一种流行的社交工具。它们给用户提供了一个平台,在这里他们可以结交新朋友,分享他们的生活和信仰,并建立深厚的人际关系。然而,市场上存在大量的语音交友app,这使得…

深度学习--基础(一)pytorch安装--cpu

在线安装 无GPU的时候,只能安装CPU版本,打开官网 https://pytorch.org/ 直接Pip安装即可 国内访问这些下载安装会出现超时的情况,可以-i指定国内安装源: pip3.11 install torch torchvision torchaudio -i https://pypi.tuna.ts…

java版本电子招标采购系统源码—企业战略布局下的采购

​ 智慧寻源 多策略、多场景寻源,多种看板让寻源过程全程可监控,根据不同采购场景,采取不同寻源策略, 实现采购寻源线上化管控;同时支持公域和私域寻源。 询价比价 全程线上询比价,信息公开透明&#xff0…

信息安全复习四:置换密码乘积密码隐写术

一、章节梗概 置换密码、Rail Fence密码、行置换密码、乘积密码、转子机、隐写术 二、置换技术 2.1 定义 重新排列明文字母,达到信息加密的目的。 与替代密码不同的是,原来明文中的字母同样出现在密文中,只是顺序被打断。 古典的置换密码…

当⻉借⼒阿⾥云落地云原⽣架构转型,运维降本、效率稳定性双升

作者:当贝技术团队 随着业务飞速发展,当贝的传统 IT 资产也渐显臃肿,为了避免制约发展的瓶颈,痛定思痛,技术团队果断变革:核心业务云原生化之后,运维效率、整体稳定性和研发效率均得到了全面提…

【SVN】window SVN安装使用教程(服务器4.3.4版本/客户端1.11.0版本)

介绍 这里是小编成长之路的历程,也是小编的学习之路。希望和各位大佬们一起成长! 以下为小编最喜欢的两句话: 要有最朴素的生活和最遥远的梦想,即使明天天寒地冻,山高水远,路远马亡。 一个人为什么要努力&a…

中台产品经理02:产品经理如何用一套方法搞定复杂业务拆解?

如果你问我作为企业级应用的产品经理日常工作最大的感受是什么?那就是经常会需要面对众多复杂类业务需求。 原因其实很好理解,B端产品通常需要支持更复杂的业务流程,需求也更加个性化和细分。例如,银行业务系统、医院管理系统、物…

CDR2023新版本安装下载教程

CDR2023是最新发布的一款强大且专业的图像设计软件,适用于平面设计、装饰设计、产品包装设计等领域。coco玛奇朵其主要功能如下: 1. 矢量图形设计:提供强大的绘图与编辑工具,支持创建和编辑各种矢量图形,如线条、曲线、矩形、椭圆、星形等。 2. 文字编辑:提供文字输入、编辑与…

C++类与对象—上

本期我们来学习类与对象 目录 面向过程和面向对象初步认识 类的引入 访问限定符 类的定义 封装 类的作用域 类的实例化 this指针 C语言和C实现Stack的对比 面向过程和面向对象初步认识 C 语言是 面向过程 的, 关注 的是 过程 ,分析出求解问题的…

buuctf -2

目录 你竟然赶我走 大白 N种方法解决 [ACTF2020 新生赛]Include 1 php://filter的一些学习 [ACTF2020 新生赛]Exec [强网杯 2019]随便注 你竟然赶我走 1.下载文件,得到一张图片 2.放进010分析,在文件尾得到flag 大白 1.根据题目提示&#xff0…