elasticsearch过滤器filter:原理及使用

码到三十五 : 个人主页

目录

    • 一、引言
    • 二、Elasticsearch的过滤器概述
    • 三、使用DSL进行过滤操作
      • 术语过滤
      • 范围过滤
      • 复合过滤
    • 四、优化策略
    • 五、结语

一、引言

Elasticsearch是一个功能强大的开源搜索引擎,广泛应用于各种数据检索和处理场景。在Elasticsearch中,过滤器(Filter)是一个核心概念,用于在查询过程中过滤出满足特定条件的文档。在Elasticsearch 7及以上版本过滤器在功能和使用方式上发生了一些变化。本文将详细介绍基于Elasticsearch 7及以上版本的过滤器技术,包括其工作原理、DSL使用示例以及优化策略等内容。

二、Elasticsearch的过滤器概述

在Elasticsearch 7及以上版本中,过滤器的概念已经逐渐被查询(Query)中的布尔子句(Bool Clause)所取代。尽管在之前的版本中,过滤器被用于快速筛选文档而不计算得分,但在新版本中,这种功能已经集成到了查询的布尔子句中。通过使用布尔子句中的filter子句,我们可以实现与过滤器相似的功能,同时保持查询的灵活性。

三、使用DSL进行过滤操作

在Elasticsearch中,Domain Specific Language(DSL)是一种用于构建查询和过滤器的声明式语言。下面我们将通过几个示例来展示如何在Elasticsearch 7及以上版本中使用DSL进行过滤操作。

术语过滤

假设我们有一个包含商品信息的索引,想要筛选出包含特定关键词的商品。可以使用布尔查询中的filter子句结合term查询来实现术语过滤。

GET /products/_search
{"query": {"bool": {"filter": [{ "term": { "product_name.keyword": "phone" } }]}}
}

上述查询将返回所有product_name字段包含"phone"关键词的商品文档。
在这里插入图片描述

范围过滤

如果我们想要根据价格范围来筛选商品,可以使用range查询来实现范围过滤。

GET /products/_search
{"query": {"bool": {"filter": [{ "range": { "price": { "gte": 100, "lte": 500 } } }]}}
}

这个查询将返回价格在100到500之间的商品文档。

复合过滤

通过结合多个filter子句,我们可以构建更复杂的过滤逻辑。例如,我们可以同时按照产品名称和价格范围进行筛选。

GET /products/_search
{"query": {"bool": {"filter": [{ "term": { "product_name.keyword": "phone" } },{ "range": { "price": { "gte": 100, "lte": 500 } } }]}}
}

这个查询将返回产品名称为"phone"且价格在100到500之间的商品文档。

四、优化策略

  • 使用keyword字段进行精确匹配

在构建术语过滤时,应使用keyword类型的字段进行精确匹配,而不是text类型的字段。Text类型的字段会经过分词处理,可能导致不准确的匹配结果。

  • 避免在过滤器中使用脚本

复杂的脚本过滤器可能导致性能下降。尽量使用内置的查询和过滤器类型来满足需求,避免不必要的脚本计算。

  • 利用缓存机制

Elasticsearch会对过滤器的结果进行缓存,以提高查询效率。确保过滤器的逻辑稳定且不会频繁变化,以充分利用缓存机制带来的优势。

  • 控和分析查询性能

使用Elasticsearch提供的监控和分析工具,定期检查查询性能,并根据需要进行调优。例如,可以调整缓存策略、优化查询语句或增加硬件资源等方式来提高性能。

五、结语

通过深入了解过滤器的原理和使用方式,并结合DSL构建查询语句,我们可以更好地利用Elasticsearch进行数据检索和处理。同时,注意优化策略和监控性能也是确保查询高效性的关键。


关注以下公众号获取更多深度内容,纯干货 !

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

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

相关文章

WPS如何合并多个word文档到一个文档中

将多个Word文档合并成一个 【插入】---》【附件】----》【文件中的文字】----》选择多个需要合并的word文档,点击确定即可。 用的工具是WPS。

高级优化理论与方法(十五)

高级优化理论与方法(十五) Algorithms for Constrained OptimizationProjectionIdeaExampleMethodProblemSolutionOrthogonal ProjectorDefinitionRemarkLemmaTheorem ProjectionProjected steepest descentPropertiesTheoremProperties Lagranges Algor…

Qt插件系统

概述 Qt提供了两个用于创建插件的api: 一个高级API,用于编写Qt本身的扩展:自定义数据库驱动程序,图像格式,文本编解码器,自定义样式等。用于扩展Qt应用程序的低级API。 例如,如果您想编写一个自定义的QStyle子类并让…

MS1112驱动开发(iio框架)

作者简介: 一个平凡而乐于分享的小比特,中南民族大学通信工程专业研究生在读,研究方向无线联邦学习 擅长领域:驱动开发,嵌入式软件开发,BSP开发 作者主页:一个平凡而乐于分享的小比特的个人主页…

Qt实现单例模式:Q_GLOBAL_STATIC和Q_GLOBAL_STATIC_WITH_ARGS

目录 1.引言 2.了解Q_GLOBAL_STATIC 3.了解Q_GLOBAL_STATIC_WITH_ARGS 4.实现原理 4.1.对象的创建 4.2.QGlobalStatic 4.3.宏定义实现 4.4.注意事项 5.总结 1.引言 设计模式之单例模式-CSDN博客 所谓的全局静态对象,大多是在单例类中所见,在之前…

工具链 之 Vite 开发服务器所有选项解析(三)

server 配置 // vite.config.js import { defineConfig } from vite // https://vitejs.dev/config/ export default defineConfig({ server: { origin: http://127.0.0.1:8080, //用于定义开发调试阶段生成资源的 originhost: 0.0.0.0, // 监听所有可用的网络接口 po…

idea插件开发之在项目右键添加菜单

写在前面 本文看下如何在右键列表中增加菜单。 正戏 首先创建一个Action,要显示的menu选择ProjectViewPopupMenu,如下: action public class CAction extends AnAction {Overridepublic void actionPerformed(AnActionEvent e) { // …

MATLAB算法实战应用案例精讲-【数模应用】偏相关分析(附MATLAB、python和R语言代码实现)

目录 前言 知识储备 相关性分析 一、实际应用 二、理论思想 三、操作过程 四、结果分析 算法原理 什么是偏相关 数学模型 (一) 偏相关系数r (二) 假设检验 偏相关分析过程 偏相关分析的SPSS实现 SPSS、EXCLE实现偏相关分析 STATA SPSSPRO 1、作用 2、输入输…

C#语言入门详解 --- 方法(含传值 输出 引用 数组)

方法 方法标准式 <Access Specifier> <Return Type> <Method Name>(Parameter List) { Method Body } 让我们逐一对每一个模块进行解释&#xff1a; Access Specifier&#xff1a;访问修饰符&#xff0c;这决定了接下来的主题的可见性&#xff0c;包含p…

使用python绘制三维直方图

使用python绘制三维直方图 三维直方图定义特点 效果代码 三维直方图 维直方图&#xff08;3D直方图&#xff09;是一种用于展示三维数据分布情况的图表。它扩展了二维直方图的概念&#xff0c;通过在三维空间中绘制柱体来表示数据在三个维度&#xff08;X、Y、Z&#xff09;上…

漏斗限流(leaky bucket)

漏斗限流(leaky bucket&#xff09; 介绍工作原理leaky bucket实现示例&#xff1a;搭配pool池pool.lua示例搭配示例 对象池&#xff08;pool&#xff09;结合漏斗限流&#xff08;leaky bucket&#xff09;的好处&#xff1a; 介绍 漏斗限流&#xff08;leaky bucket&#xff…

Ollama 配置多并发和多模型

ollama新版已经支持了并发和多模型同时运行了&#xff0c; 系统资源够的可以走起了 默认的ollama服务是不支持的&#xff0c; 需要自己进行调整&#xff0c; 调整的方式如下&#xff1a; Linux为例 通过调用 编辑 systemd 服务systemctleditollama.service 这将打开一个编辑器…

Changes Coming to NIAP Entropy Assessment Reports in 2025

“What do you say to a room full of DRBGs standing around you? Everyone, please be seeded.” -Quin, atsec tester When things change, it can help to approach that change with a light heart like this. Recently, NIAP announced that Entropy Assessment Rep…

结合gin框架在沙箱环境下实现电脑网站支付和当面支付

文章目录 配置支付宝开放平台编写代码测试电脑网站支付当面扫码支付 配置支付宝开放平台 支付宝开放平台 点击链接&#xff0c;扫码进入后&#xff0c;点击沙箱&#xff1a; 点击沙箱应用&#xff0c;可以看到APPID&#xff0c;接口加签方式选择系统默认密钥就行&#xff0…

基于Python的垃圾分类检测识别系统(Yolo4网络)【W8】

简介&#xff1a; 垃圾分类检测识别系统旨在利用深度学习和计算机视觉技术&#xff0c;实现对不同类别垃圾的自动识别和分类。应用环境包括Python编程语言、主流深度学习框架如TensorFlow或PyTorch&#xff0c;以及图像处理库OpenCV等&#xff0c;通过这些工具集成和优化模型&a…

第2天:项目结构与配置深入

第2天&#xff1a;项目结构与配置深入 目标 熟悉Django项目结构&#xff0c;配置基础设置。 任务概览 理解Django项目结构。配置settings.py。理解Django的URL配置。 详细步骤 理解Django项目结构 Django项目由一个或多个应用&#xff08;apps&#xff09;组成。每个应用…

js 实现图片纵向拼接并下载

js 使用canvas实现图片按照顺序拼接成纵向长图 /*** 图片拼接长图*/export default class ImageStitching {constructor(options) {this.imageUrls options.imageUrlsthis.images []this.imagesLoaded 0this.canvas nullthis.ctx nullthis.width options.width || 750th…

python判断一个数是不是偶数

在Python中&#xff0c;你可以使用模运算符 % 来判断一个数是否为偶数。模运算符会返回两个数相除的余数。如果一个数除以2的余数为0&#xff0c;那么这个数就是偶数。 以下是一个简单的Python函数&#xff0c;用于判断一个数是否为偶数&#xff1a; def is_even(n):return n…

成都爱尔林江院长建议近视防控从小做起,具体怎么做

预防近视应从小做起&#xff0c;知识储备多多益善。孩子如何做到近视防控&#xff1f; 成都爱尔眼科医院小儿眼科专家林江院长建议家长和孩子同时树立科学观念&#xff0c;让孩子拥有一个丰富多彩假期的同时强身健体也保护好眼睛。 不宅家、多户外 确保每天至少2个小时的户外…

【教程】SEO搜索优化怎么做?你必须知道的网站SEO诊断优化关键因素

在SEOer界流传着这样一句话,“内容为王,外链为皇,速度为后,内链为妃,代码为将,关键词为相,结构为城,更新为太子,工具为神兵”,我相信站长们对这条“黄金法则”一定都不陌生,其中“速度为后,工具为神兵”为土爹爹添加。毫不夸张地说,SEO(搜索引擎优化)就是大多数…