ElasticSearch topHits 多文档索引

2024-09-06 07:18

本文主要是介绍ElasticSearch topHits 多文档索引,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

ElasticSearch termsAggregation、topHits 多文档索引

欢迎添加作者公众号,有什么问题可以留言
在这里插入图片描述

demo下载地址:http://www.demodashi.com/demo/16913.html

1.应用场景

我们需要在五种不同的文档中检索数据。比如 商品(goods)、案例(cases)、日记(diaries)、帖子(posts)、商家(shops)。我们现在需要用关键字做全文检索,但是命中结果需要包含每一类数据。goods->如果关键字命中,最多返回4条,不命中返回0条。cases、diaries、posts、shops 4类数据都遵循上诉规则,就是每一类最多返回4条,没有关键词命中,则不返回。

2.分开检索每一类索引文档

为了赶工期,由于业务场景中,有单类索引检索的需求,所以一开始,我们重用了单索引的code,直接在接口层聚合5类数据。但是这样我们搜索服务与应用服务的开销无疑是增大了很多。我们来看看接口调用:
在这里插入图片描述
看到这儿,是不是有些难受。这么多调用,这么多并发,只想说一句,难受啊。是的,我心里也很难受,所以我们必须做出改变

3.一起来优化优化吧

不应该访问这么多服务,我们知道ES是可以一次性检索多类文档。我们当然希望,一次让ES返回我们所有的检索数据,那当然是最好的。我们来看看简化后的流程:
在这里插入图片描述
哟西,好像简洁了很多

4.把任务一次性交给Elasticsearch

优化之后的请求,少了服务的多次调用,少了并发的开销,我们把所有大部分任务一次性交给了SE(search engine),通过SE的计算,我们只需要一次调用服务,就可以拿到想要的所有数据,进行数据的分类封装,就可以返回给客户端使用了。那么这个过程又发生了哪些变化呢?在coding过程中,用到了哪些知识呢?下面我们一起来code share吧。

4.通过聚合函数平均返回值

要点:
terms aggregation — Bucket aggregation
topHints aggregation — Metrics aggregation

terms aggregation是Elasticsearch的Bucket aggregation,就是聚合桶;topHints aggregation 是Elasticsearch Metrics aggregation ,指标聚合。
terms aggregation — 提供根据某个字段进行装桶,可以认为是根据指定key进行分组。桶聚合的特点,只能返回桶的数据。比如:根据”_index”分组,那我们聚合桶就只有_index的值,而不能拿到命中的数据。
topHints aggregation — 返回排序靠前的数据,值得注意的是,支持返回最大的size 是 200。指标聚合,会根据桶内的数据进行指标计算。topHint 可以让我们拿到命中的数据。
说明:在这里介绍下metrics aggregation 、Bucket Aggregation的区别。metrics Aggregation 是对聚合数据的计算。Bucket Aggregation 用于对数据进行分组。往往我们在业务实现中,DSL中是需要有多种类型的aggregation的。
根据topHints aggregation 的特点,我们利用这样的方法检索,每类数据返回结果是不能超过200条的

5.code share

核心代码:
在这里插入图片描述
aggregationBuilder 语义说明:

1.创建名称为 “indexBucketName”的terms bucket
2.然后在每个terms bucket中创建名称为”bucketFiledName”的 topHints aggregation的子聚合。
3.子聚合中根据”_score”(命中分数),进行排序。

这篇关于ElasticSearch topHits 多文档索引的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1141362

相关文章

Python操作PDF文档的主流库使用指南

《Python操作PDF文档的主流库使用指南》PDF因其跨平台、格式固定的特性成为文档交换的标准,然而,由于其复杂的内部结构,程序化操作PDF一直是个挑战,本文主要为大家整理了Python操作PD... 目录一、 基础操作1.PyPDF2 (及其继任者 pypdf)2.PyMuPDF / fitz3.Fre

MySQL 强制使用特定索引的操作

《MySQL强制使用特定索引的操作》MySQL可通过FORCEINDEX、USEINDEX等语法强制查询使用特定索引,但优化器可能不采纳,需结合EXPLAIN分析执行计划,避免性能下降,注意版本差异... 目录1. 使用FORCE INDEX语法2. 使用USE INDEX语法3. 使用IGNORE IND

springboot自定义注解RateLimiter限流注解技术文档详解

《springboot自定义注解RateLimiter限流注解技术文档详解》文章介绍了限流技术的概念、作用及实现方式,通过SpringAOP拦截方法、缓存存储计数器,结合注解、枚举、异常类等核心组件,... 目录什么是限流系统架构核心组件详解1. 限流注解 (@RateLimiter)2. 限流类型枚举 (

C#监听txt文档获取新数据方式

《C#监听txt文档获取新数据方式》文章介绍通过监听txt文件获取最新数据,并实现开机自启动、禁用窗口关闭按钮、阻止Ctrl+C中断及防止程序退出等功能,代码整合于主函数中,供参考学习... 目录前言一、监听txt文档增加数据二、其他功能1. 设置开机自启动2. 禁止控制台窗口关闭按钮3. 阻止Ctrl +

MySQL逻辑删除与唯一索引冲突解决方案

《MySQL逻辑删除与唯一索引冲突解决方案》本文探讨MySQL逻辑删除与唯一索引冲突问题,提出四种解决方案:复合索引+时间戳、修改唯一字段、历史表、业务层校验,推荐方案1和方案3,适用于不同场景,感兴... 目录问题背景问题复现解决方案解决方案1.复合唯一索引 + 时间戳删除字段解决方案2:删除后修改唯一字

Java docx4j高效处理Word文档的实战指南

《Javadocx4j高效处理Word文档的实战指南》对于需要在Java应用程序中生成、修改或处理Word文档的开发者来说,docx4j是一个强大而专业的选择,下面我们就来看看docx4j的具体使用... 目录引言一、环境准备与基础配置1.1 Maven依赖配置1.2 初始化测试类二、增强版文档操作示例2.

浅谈mysql的not exists走不走索引

《浅谈mysql的notexists走不走索引》在MySQL中,​NOTEXISTS子句是否使用索引取决于子查询中关联字段是否建立了合适的索引,下面就来介绍一下mysql的notexists走不走索... 在mysql中,​NOT EXISTS子句是否使用索引取决于子查询中关联字段是否建立了合适的索引。以下

Java操作Word文档的全面指南

《Java操作Word文档的全面指南》在Java开发中,操作Word文档是常见的业务需求,广泛应用于合同生成、报表输出、通知发布、法律文书生成、病历模板填写等场景,本文将全面介绍Java操作Word文... 目录简介段落页头与页脚页码表格图片批注文本框目录图表简介Word编程最重要的类是org.apach

MySQL之InnoDB存储引擎中的索引用法及说明

《MySQL之InnoDB存储引擎中的索引用法及说明》:本文主要介绍MySQL之InnoDB存储引擎中的索引用法及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录1、背景2、准备3、正篇【1】存储用户记录的数据页【2】存储目录项记录的数据页【3】聚簇索引【4】二

全面解析MySQL索引长度限制问题与解决方案

《全面解析MySQL索引长度限制问题与解决方案》MySQL对索引长度设限是为了保持高效的数据检索性能,这个限制不是MySQL的缺陷,而是数据库设计中的权衡结果,下面我们就来看看如何解决这一问题吧... 目录引言:为什么会有索引键长度问题?一、问题根源深度解析mysql索引长度限制原理实际场景示例二、五大解决