当前位置: 首页 > news >正文

【elasticsearch实现优先展示连词并按某个字段折叠显示最新一条】

elasticsearch实现优先展示连词并按某个字段折叠显示最新一条

  • 前言
  • match_phrase 顺序前缀 + boost 权重
  • collapse 折叠
    • 基本用法
    • 高级功能
    • 排序


前言

场景要求:

  1. 优先展示关键词连词的商品
  2. 按照某个字段折叠相同字段,并按指定排序字段选择第一个

match_phrase 顺序前缀 + boost 权重

elasticsearch常用匹配:

match_phrase 查询
match_phrase 查询用于匹配包含短语的文档,它会确保查询的短语在文档中按顺序连续出现。

{ "query": { "match_phrase": { "content": "星球大战" } } 
} 

multi_match 查询
multi_match 查询允许在多个字段上执行相同的查询,可以指定不同的字段权重和查询类型。

{ "query": { "multi_match": { "query": "星球大战", "fields": ["title", "content^2"], "type": "best_fields", "tie_breaker": 0.3 } } 
} 

match_all 查询
match_all 查询会匹配所有文档,常用于返回整个索引的内容或与其他查询一起使用。

{ "query": {     "match_all": {} } 
} 

match_none 查询
match_none 查询用于不匹配任何文档,通常用于测试或特定的过滤场景。

{ "query": { "match_none": {} } 
} 

bool 查询
bool 查询是一个复合查询,允许将多个查询条件组合在一起,包括 must 、 should 、 must_not 和 filter 子句。

{ "query": { "bool": { "must": [ { "match": { "title": "星球" } }, { "match": { "title": "大战" } } ], "filter": [ { "range": { "price": { "gte": 100, "lte": 200 } } } ] } } 
} 

term 查询
term 查询用于精确匹配某个字段的值,不会对查询字符串进行分析。

{ "query": { "term": { "category.keyword": "电影" } } 
} 

terms 查询
terms 查询用于匹配多个值,类似于 SQL 中的 IN 操作符。

{ "query": { "terms": { "tags.keyword": ["science fiction", "action"]     } } 
} 

efix 查询
prefix 查询用于匹配指定字段开头的文档。

{ "query": { "prefix": { "title": "星球" } } 
} 

wildcard 查询
wildcard 查询允许使用通配符匹配字段值。

{ "query": { "wildcard": { "title": "星球*" } } 
} 

range 查询
range 查询用于匹配指定范围内的字段值。

{ "query": { "range": { "price": { "gte": 100, "lte": 200 } } } 
}

要实现目标效果,这里需要用的就是match_phrase 顺序前缀 + boost 权重
查询按顺序的与不按顺序的,将按顺序的权重高于不按顺序的就可以了

	"query": {"bool": {"should": [{"match_phrase": {"name": {"query": "星球大战","boost": 3 # 权重}}},{"match": {"name": {"query": "星球大战","boost": 1 # 权重}}}]}},

collapse 折叠

Elasticsearch (ES) 中的collapse功能主要用于在搜索结果中进行字段折叠,以便于根据某个字段的不同值只返回每个值的首个匹配项。这类似于SQL 中的 GROUP BY功能,但在 Elasticsearch 中主要用于避免返回重复的数据,并集中展示多样化的结果。这个功能特别适用于想要从每个类别或组获取顶部记录的场景。

基本用法

基本的 collapse 语法需要指定一个字段,搜索结果会根据该字段的值折叠,每个不同的值只返回第一条匹配的记录。例如,如果你有一个包含多个产品信息的索引,每个产品都有一个 “brand” 字段,你可能想要从每个品牌中获取一条记录。

GET /products/_search
{"query": {"match_all": {}},"collapse": {"field": "brand.keyword"  // 使用.keyword后缀以确保字段不分词}
}

在这个示例中,搜索将返回每个品牌的第一个产品。

高级功能

如果你希望除了获取每个分组的首个匹配项外,还想获取每个分组的更多记录,可以使用 inner_hits 选项。例如,获取每个品牌的前三个产品:

GET /products/_search
{"query": {"match_all": {}},"collapse": {"field": "brand.keyword","inner_hits": {"name": "more_products",  // inner hits的名称,可自定义"size": 3  // 每个品牌返回的记录数}}
}

排序

你也可以在折叠字段上指定排序规则,以确定哪条记录应该作为每个值的代表:

GET /products/_search
{"query": {"match_all": {}},"sort": [{"price": {"order": "asc"}}],"collapse": {"field": "brand.keyword"}
}

在这个例子中,系统会针对每个品牌返回价格最低的产品。

注意事项

性能影响:使用 collapse 可能会影响查询的性能,尤其是在处理大量数据时。字段选择:折叠字段应该是非分析字段(例如,通常带有 .keyword 后缀的字段),以保证字段值的完整性。限制:折叠操作不能和某些其他特性如聚合(aggregations)直接组合。

通过适当使用 collapse 功能,可以在 Elasticsearch 中有效地管理和优化搜索结果的展示,使得结果更加精准和高效。

相关文章:

【elasticsearch实现优先展示连词并按某个字段折叠显示最新一条】

elasticsearch实现优先展示连词并按某个字段折叠显示最新一条 前言match_phrase 顺序前缀 boost 权重collapse 折叠基本用法高级功能排序 前言 场景要求: 优先展示关键词连词的商品按照某个字段折叠相同字段,并按指定排序字段选择第一个 match_phras…...

Golang | Leetcode Golang题解之第284题窥视迭代器

题目: 题解: type PeekingIterator struct {iter *Iterator_hasNext bool_next int }func Constructor(iter *Iterator) *PeekingIterator {return &PeekingIterator{iter, iter.hasNext(), iter.next()} }func (it *PeekingIterator) hasNe…...

C语言中的结构体

文章目录 前言一、结构体是什么?二、结构体的定义三、结构体的初始化四、结构体的嵌套五、结构体数组 1结构体数组的定义:六、结构体指针 一、结构体是什么? 我们知道一群类型相同的数据组合到一起是数组,那一群不同类型的数据组…...

3.qml与c++模块化开发

目录 模块化开发封装c模块并使用封装qml模块并使用 模块化开发 什么是模块化开发呢? 举个例子: 我们有一台台式电脑,我们台式电脑有显卡,内存,磁盘,cpu,键盘,鼠标等 你可以将这些部…...

怎么使用github上传XXX内所有文件

要将 目录中的所有文件上传到 GitHub,你可以按照以下步骤进行: 创建一个新的 GitHub 仓库 登录到你的 GitHub 账户。 点击右上角的加号(),选择 “New repository”。 输入仓库名称(例如:202407…...

合作伙伴中心Partner Center中添加了Copilot预览版

目录 一、引言 二、Copilot 功能概述 2.1 Copilot 简介 2.2 Copilot 的核心功能 2.3 Copilot 的访问和使用 三、Copilot 的使用方法 3.1 Copilot 功能区域 3.2 Copilot 使用示例 3.2.1 编写有效提示 3.2.2 使用反馈循环 四、负责任的人工智能 4.1 Copilot 结果的可…...

Navidrome音乐服务器 + 音流APP = 释放你的手机空间

20240727 By wdhuag 目录 前言: 参考: Navidrome音乐服务器 Demo试用: 支持多平台: 下载: 修改配置: 设置用NSSM成服务启动: 服务器本地访问网址: 音流 歌词封面API&am…...

Prometheus安装部署

文章目录 1.Prometheus(普罗米修斯)安装部署1.1部署环境准备1.2部署prometheus1.3主机数据展示 2.Grafana安装部署2.1部署Grafana2.2配置Grafana数据源2.2配置Grafana仪表板 3.AlertManager安装部署3.1部署alertmanager3.2告警邮件发送配置3.3测试邮件告警效果3.4自定义邮件告警…...

算法(查找算法---二分查找/索引查找/哈希表查找)

二、查找算法 什么是查找算法: 在一个数据序列中,查找某个数据是否存在或存在的位置,在实际开发过程中使用的频率非常高,例如对数据常见的操作有增、删、改、查,增加数据时需要查询新增加的数据是否重复,…...

SQL labs-SQL注入(二)

环境搭建参考 SQL注入(一) 一,SQL labs-less2。 http://192.168.61.206:8001/Less-2/?id-1 union select 1,2,group_concat(username , password) from users-- 与第一关没什么太大的不同,唯一区别就是闭合方式为数字型。 二…...

go 语言踏出第一步

1、下载Go语言安装包:在官方网站(https://golang.org/dl/)上下载适合你操作系统的Go语言安装包。选择一个tar.gz格式的包。 2、解压安装包:打开终端,进入下载目录,并使用以下命令解压安装包: ta…...

SpringBoot-21 SpringBoot微服务的发布与部署(3种方式)

基于 SpringBoot 的微服务开发完成之后,现在到了把它们发布并部署到相应的环境去运行的时候了。 SpringBoot 框架只提供了一套基于可执行 jar 包(executable jar)格式的标准发布形式,但并没有对部署做过多的界定,而且为…...

在occluded Person Re-ID中,选择clip还是ViT作为backbone?

在遮挡行人再识别(Occluded Person Re-Identification, Occluded Person Re-ID)任务中,使用CLIP(Contrastive Language-Image Pre-Training)作为backbone和使用Vision Transformer(ViT)作为back…...

Linuxnat网络配置

📑打牌 : da pai ge的个人主页 🌤️个人专栏 : da pai ge的博客专栏 ☁️宝剑锋从磨砺出,梅花香自苦寒来 ☁️运维工程师的职责:监…...

77.WEB渗透测试-信息收集-框架组件识别利用(1)

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 内容参考于: 易锦网校会员专享课 上一个内容:76.WEB渗透测试-信息收集- WAF、框架组件识别(16) java&#xff…...

ExcelJS:轻松实现Excel文件的读取、操作与写入

文章目录 发现宝藏1. 简介2. 安装3. 创建工作簿4. 设置工作簿属性5. 添加工作表6.删除工作表7.访问工作表8. 列操作9. 行操作10. 单元格操作 发现宝藏 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【宝…...

Java 多线程技术详解

文章目录 Java 多线程技术详解目录引言多线程的概念为什么使用多线程?多线程的特征多线程的挑战 多线程的实现方式3.1 继承 Thread 类示例代码: 3.2 实现 Runnable 接口示例代码: 3.3 使用 Executor 框架示例代码: 3.4 使用 Calla…...

一份简单实用的MATLAB M语言编码风格指南

MATLAB M语言编码风格指南 1. 文件命名2. 函数命名3. 注释4. 变量命名5. 布局、注释和文档6. 代码结构7. 错误处理8. 性能优化9. 格式化输出 MATLAB M文件的编码规范对于确保代码的可读性、可维护性和一致性非常重要。下面是一份MATLAB M语言编码规范的建议,可以作为…...

ubuntu 环境下soc 使用qemu

构建vexpress-a9的linux内核 安装依赖的软件 sudo apt install u-boot-tools sudo apt install gcc-arm-linux-gnueabi sudo apt install g-arm-linux-gnueabi sudo apt install gcc#编译内核 下载 linux-5.10.14 linux-5.10.148.tar.gz 配置 sudo tar -xvf linux-5.10.1…...

Centos安装、迁移gitlab

Centos安装迁移gitlab 一、下载安装二、配置rb修改,起服务。三、访问web,个人偏好设置。四、数据迁移1、查看当前GitLab版本2、备份旧服务器的文件3、将上述备份文件拷贝到新服务器同一目录下,恢复GitLab4、停止新gitlab数据连接服务5、恢复备…...

设计模式和设计原则回顾

设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...

【Oracle APEX开发小技巧12】

有如下需求: 有一个问题反馈页面,要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据,方便管理员及时处理反馈。 我的方法:直接将逻辑写在SQL中,这样可以直接在页面展示 完整代码: SELECTSF.FE…...

基于Flask实现的医疗保险欺诈识别监测模型

基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施,由雇主和个人按一定比例缴纳保险费,建立社会医疗保险基金,支付雇员医疗费用的一种医疗保险制度, 它是促进社会文明和进步的…...

AtCoder 第409​场初级竞赛 A~E题解

A Conflict 【题目链接】 原题链接:A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串,只有在同时为 o 时输出 Yes 并结束程序,否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...

C++ 基础特性深度解析

目录 引言 一、命名空间(namespace) C 中的命名空间​ 与 C 语言的对比​ 二、缺省参数​ C 中的缺省参数​ 与 C 语言的对比​ 三、引用(reference)​ C 中的引用​ 与 C 语言的对比​ 四、inline(内联函数…...

Caliper 配置文件解析:config.yaml

Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...

【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分

一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计,提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合:各模块职责清晰,便于独立开发…...

华硕a豆14 Air香氛版,美学与科技的馨香融合

在快节奏的现代生活中,我们渴望一个能激发创想、愉悦感官的工作与生活伙伴,它不仅是冰冷的科技工具,更能触动我们内心深处的细腻情感。正是在这样的期许下,华硕a豆14 Air香氛版翩然而至,它以一种前所未有的方式&#x…...

Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?

Redis 的发布订阅(Pub/Sub)模式与专业的 MQ(Message Queue)如 Kafka、RabbitMQ 进行比较,核心的权衡点在于:简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...

C++.OpenGL (14/64)多光源(Multiple Lights)

多光源(Multiple Lights) 多光源渲染技术概览 #mermaid-svg-3L5e5gGn76TNh7Lq {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-3L5e5gGn76TNh7Lq .error-icon{fill:#552222;}#mermaid-svg-3L5e5gGn76TNh7Lq .erro…...