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

谈谈 ES 6.8 到 7.10 的功能变迁(3)- 查询方法篇

上一篇咱们了解了 ES 7.10 相较于 ES 6.8 新增的字段类型,这一篇我们继续了解新增的查询方法。

Interval 间隔查询:

功能介绍

Interval 查询,词项间距查询,可以根据匹配词项的顺序、间距和接近度对文档进行排名。主要解决的查询场景“创建一个多搜索词匹配的查询,同时保留搜索词的顺序”,比 match phrase 更加符合需求场景,查询方法使用比 span 查询更简单。ES 后续版本想用 interval 查询逐步替代 span 查询。

注意事项

规则组合
  • 可以使用 prefix、wildcard、fuzzy 等规则
  • 通过设置 max_gaps 和 ordered 参数,可以控制词项间的最大间隙和顺序要求
性能考虑
  • 间隔查询比简单的词项匹配更消耗资源
  • 嵌套规则越多,性能开销越大
  • 建议合理使用 maxGaps 参数限制间距
使用限制
  • 只能用于 text 字段
  • 不支持跨字段查询
  • 不支持对数值类型字段使用

Distance feature 查询

功能说明

时间/地理距离特性查询,该查询用于查找更接近被查询日期和地理位置的结果。 日期和位置分别是声明为 date 和 geo_point 数据类型的字段。返回结果的字段值不需要完全等于被查询值,而是按照给定日期或给定位置的进度算分,越是接近被查询值,在相关性得分中被评为更高

字段类型要求

  • 日期字段必须是 date 类型,地理位置字段必须是 geo_point 类型
  • 不支持其他类型的距离计算

评分机制

  • 距离越近,得分越高
  • 使用 boost 参数调整权重
  • 可以与其他查询组合使用

性能考虑

  • 地理距离计算较为耗费资源,建议使用合适的索引优化地理查询,比如:考虑使用地理网格索引提升性能

Pinned 查询

功能说明

实现对某些文档的置顶功能,使用存储在_id 字段中的文档 ID 来标识升级或“固定”的文档。
此功能通常用于引导搜索者查找精选的文档,这些文档在搜索的任何 “organic” 匹配项之上被提升。当查询中有排序时,pinned 查询失效

使用限制
  • 不能与自定义排序一起使用
  • 置顶文档必须存在于索引中
  • 最多支持 100 个置顶文档
排序规则
  • 置顶文档按照 ids 数组中的顺序排序
  • organic 查询结果按照相关性得分排序
  • 置顶文档始终在 organic 结果之前

PIT 查询

功能说明

Point in time 查询是一个轻量级的视图,根据保留周期保留 PIT 查询发生时数据的状态,用于不同条件的深度分页查询。

scroll 滚动搜索及其上下文与查询内容绑定。这意味着编写一个查询,添加一个滚动参数,来自这个查询的响应数据就会保持一致。不同的查询内容则会产生不同的 scroll 上下文,资源使用就会相对紧张。有时想对同一固定数据集适时运行不同的查询,就需要 PIT 查询。

如果对于一个不断变化的索引有着很高的搜索负载,那么为每个请求创建一个新的时间点查询会使用相当多的资源。可以通过使用一个后台进程每隔几分钟创建一个时间点 id 并将其用于所有搜索请求的方式来优化资源使用

更多内容可以参照这里

注意事项

资源管理
  • PIT 会占用系统资源,需要及时释放
  • 建议设置合理的保留时间
  • 监控 open context 数量
使用场景
  • 适合需要一致性视图的场景
  • 适合需要深度分页的场景
  • 适合需要在固定数据集上执行多次查询的场景
性能优化
  • 避免过长的保留时间,合理设置批次大小
  • 建议查询的时候带 sort 参数排序

测试代码

// 1. 使用 product_test 索引,创建 PIT
POST /product_test/_pit?keep_alive=1m

GET /_search
{"size": 1,"query": {"match": {"model": "iphone"}},"pit": {"id": "i6-xAwEMcHJvZHVjdF90ZXN0FmRObXltV3ZDU1VTTnllYjNoR0ZtamcAFk1GQklTWXBaUkllb2h1cGl1VVFsdUEAAAAAAAABZk8WOFVoUHBhN3BSVVN5TWVmeTh4d3JpdwEWZE5teW1XdkNTVVNOeWViM2hHRm1qZwAA","keep_alive": "1m"},"sort": [{"_score": "desc"},{"_id": "asc"}]
}

DELETE /_pit
{"id":"i6-xAwEMcHJvZHVjdF90ZXN0FmRObXltV3ZDU1VTTnllYjNoR0ZtamcAFk1GQklTWXBaUkllb2h1cGl1VVFsdUEAAAAAAAABZk8WOFVoUHBhN3BSVVN5TWVmeTh4d3JpdwEWZE5teW1XdkNTVVNOeWViM2hHRm1qZwAA"}

小结

作为查询方法,Elasticsearch 新增的几个功能面对的场景更加具象且方便,大家可以根据业务的场景特性可以优化使用。其中深度分页查询是 ES 使用者几乎避免不了的场景,PIT 查询也是提供了一个更为优质的方法。

推荐阅读

  • 谈谈 ES 6.8 到 7.10 的功能变迁(1)- 性能优化篇
  • 谈谈 ES 6.8 到 7.10 的功能变迁(2)- 字段类型篇
  • 谈谈 ES 6.8 到 7.10 的功能变迁(4)- 聚合功能篇
  • 谈谈 ES 6.8 到 7.10 的功能变迁(5)- 任务和集群管理
  • 谈谈 ES 6.8 到 7.10 的功能变迁(6)- 其他

http://www.mrgr.cn/news/92166.html

相关文章:

  • MySQL-数据库的基本操作
  • X86_64位下的GS寄存器
  • 15.1 智能销售顾问系统架构与业务价值解析:AI 如何重塑销售流程
  • Windows 11【1001问】如何下载Windows 11系统镜像
  • 排序算法漫游:从冒泡到堆排的底层逻辑与性能厮杀
  • 系统学习算法:专题十二 记忆化搜索
  • 快速上手 Unstructured:安装、Docker部署及PDF文档解析示例
  • STM32-智能小车项目
  • 人工神经网络ANN入门学习笔记1
  • 前端防重复请求终极方案:从Loading地狱到精准拦截的架构升级
  • UE 跟着官方文档学习 容器TArray 系列三
  • C#中级教程(2)——走进 C# 面向对象编程:从基础到进阶的深度探索
  • 数据结构之二叉树的定义及实现
  • std::thread的同步机制
  • 讯飞离线唤醒+离线Vosk识别+DeepSeek大模型+讯飞离线合成持续优化,无限可能~
  • 【2025深度学习环境搭建-1】在Win11上用WSL2和Docker解锁GPU加速
  • C++初阶——简单实现list
  • C语言——深入理解指针(3)
  • sql的索引与性能优化相关
  • 第4章 4.1 Entity Framework Core概述