elasticsearch过滤器filter:原理及使用

news2024/10/7 3:18:36
码到三十五 : 个人主页

目录

    • 一、引言
    • 二、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.coloradmin.cn/o/1830728.html

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

相关文章

C++ | Python气泡表面张力和预期形态及上升速度数值模型

📜模型-用例 📜流体力学:C风流和MATLAB | Python | CUDA 库埃特流泊肃叶流薄膜流体 | 📜神经网络:Python捕捉重叠气泡单体运动,算法测速 ✒️C风成和风蚀建模 风成过程是指由风在地表或近地表引起的侵蚀…

大跨度气膜综合馆有哪些应用场景—轻空间

1. 体育场馆 气膜综合馆广泛应用于各类体育场馆,如足球场、篮球场、网球场、游泳馆等,满足不同体育项目的需求。 2. 大型展览 气膜馆的宽敞空间和灵活布局,非常适合举办各类大型展览、交易会和博览会,提供充足的展示和活动空间。…

深入剖析 Laravel 框架:构建高效PHP应用的最佳实践

引言 随着互联网的高速发展,PHP 作为一门广泛使用的服务器端脚本语言,始终备受开发者青睐。而在众多 PHP 框架中,Laravel 凭借其优雅的设计和高效率,成为了构建现代 Web 应用的热门选择。本文将从零开始,探讨如何使用 …

聊聊redis中的字典的实现

写在文章开头 redis作为非关系数据库,其底层采用了字典(也称为映射)保存键值对。本文会基于源码分析的方式带你了解redis中这一常见数据结构的精巧设计,希望对你有帮助。 Hi,我是 sharkChili ,是个不断在硬核技术上作死的 java c…

需求虽小但是问题很多,浅谈JavaScript导出excel文件

最近我在进行一些前端小开发,遇到了一个小需求:我想要将数据导出到 Excel 文件,并希望能够封装成一个函数来实现。这个函数需要接收一个二维数组作为参数,数组的第一行是表头。在导出的过程中,要能够确保避免出现中文乱…

【单片机】DS2431芯片,读写128个字节,程序

ds2431pt&r stm32读写程序&#xff1a; 部分程序&#xff1a; #include "sys.h" #include "delay.h" #include "usart.h"#include <stdio.h> #include <stdlib.h> #include <string.h>#include "sys.h" #incl…

使用代理IP常见问题及解答

代理IP在互联网数据收集和业务开展中发挥着重要作用&#xff0c;它充当用户客户端和网站服务器之间的“屏障”&#xff0c;可以保护用户的真实IP地址&#xff0c;并允许用户通过不同的IP地址进行操作。然而&#xff0c;在使用代理IP的过程中&#xff0c;用户经常会遇到一些问题…

车载学习:UDS诊断、ECU刷写、OTA升级、Tbox测试、CANoe实操

每天的直播时间&#xff1a; 周一至周五&#xff1a;20&#xff1a;00-23&#xff1a;00 周六与周日&#xff1a;9&#xff1a;00-12&#xff1a;00&#xff0c;14&#xff1a;00-17&#xff1a;00 TBOX 深圳 涉及过T-BOX测试吗Ota升级涉及的台架环境是什么样的&#xff1f;上…

全球潮流集结:海外盲盒小程序引领消费新风尚

随着全球化的加速和互联网的普及&#xff0c;消费者的购物选择不再局限于本土市场&#xff0c;而是越来越多地关注国际潮流和时尚趋势。在这个背景下&#xff0c;海外盲盒小程序应运而生&#xff0c;以其独特的购物模式和全球化的商品选择&#xff0c;迅速成为引领消费新风尚的…

Elasticsearch:智能 RAG,获取周围分块(二)

在之前的文章 “Elasticsearch&#xff1a;智能 RAG&#xff0c;获取周围分块&#xff08;一&#xff09; ” 里&#xff0c;它介绍了如何实现智能 RAG&#xff0c;获取周围分块。在那个文章里有一个 notebook。为了方便在本地部署的开发者能够顺利的运行那里的 notebook。在本…

522. 最长特殊序列 II(Rust)

题目 给定字符串列表 strs &#xff0c;返回其中 最长的特殊序列 的长度。如果最长特殊序列不存在&#xff0c;返回 -1 。 特殊序列 定义如下&#xff1a;该序列为某字符串 独有的子序列&#xff08;即不能是其他字符串的子序列&#xff09;。 s 的 子序列可以通过删去字符串…

Linux中nginx.conf如何配置【搬代码】

Nginx 是一个独立的软件。 它是一款高性能的 Web 服务器、反向代理服务器和负载均衡器等&#xff0c;具有强大的功能和广泛的应用场景。它通常需要单独进行安装和配置来发挥其作用。 下载网址&#xff1a;http://nginx.org/en/download.html nginx.conf写法&#xff1a; #配置…

怎么样为您的步进电机设计选择正确的驱动器

步进电机已成为从车辆气候控制到工业剂量泵和剧院舞台照明等应用的动态定位解决方案。更好的性能、更小的尺寸和更低的成本都有助于它们进入主流应用。 正如电机及其应用的发展一样&#xff0c;控制电机所需的驱动电子设备也在不断发展。特别是&#xff0c;汽车设计人员已经实…

宋仕强论道之华强北假货

宋仕强论道之华强北假货&#xff0c;在华强北发展的初期&#xff0c;假货是华强北一大特点&#xff0c;一般分为翻新&#xff08;拆机&#xff09;货、散新货、换标货、虚标货、国产替换货等几种。金航标kinghelm&#xff08;www.kinghelm.com.cn&#xff09;和萨科微slkor&…

【Docker】解决访问难题:搭建私有的Docker镜像代理

什么是Nexus 3 Nexus 3是由Sonatype公司开发的一款强大的包管理和仓库服务工具&#xff0c;它广泛应用于自动化的构建系统和持续集成/持续部署(CI/CD)流程中。Nexus 3支持多种包格式&#xff0c;包括但不限于Maven、npm、Docker、NuGet等&#xff0c;能够为软件开发中的依赖管…

【Android】安Android Studio环境搭建注意点

人不走空 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌赋&#xff1a;斯是陋室&#xff0c;惟吾德馨 目录 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌…

切割游戏介绍

简介 上大学时&#xff0c;在学校实验室里玩过一个貌似使用VC写的小游戏&#xff0c;一个小球在界面上四处游荡&#xff0c;玩家使用鼠标切割背景&#xff0c;将背景切割剩余到一定的百分比后&#xff0c;就胜利了&#xff0c;后边的背景图会全部展示出来。 使用qt的qml技术&a…

超级底层:10WQPS/PB级海量存储HBase/RocksDB,底层LSM结构是什么?

一次穿透&#xff1a;10WQPS/PB级海量存储HBase/RocksDB的底层LSM结构 LSM tree 是很多数据库内部的核心数据结构&#xff0c;包括BigTable,ClickHouse、Cassandra, Scylla&#xff0c; RocksDB&#xff0c;HBase。 ClickHouse基于Log-Structured Merge-Tree 结构&#xff08…

【Mac】CrossOver 24 for Mac(windows 虚拟机)软件介绍及与PD的比较

软件介绍 Crossover for Mac是一款由CodeWeavers开发的软件&#xff0c;它允许用户在Mac操作系统上运行Windows程序&#xff0c;而无需安装Windows操作系统。 这个工具使用了Wine项目的技术&#xff0c;它通过创建一个虚拟的Windows环境来实现在Mac上运行Windows程序。用户可…

CoppeliaSim机器人模拟器与Matlab Simulink环境

一、CoppeliaSim机器人模拟器 CoppeliaSim&#xff08;原名V-REP&#xff0c;Virtual Robot Experimentation Platform&#xff09;是一款基于物理引擎的动力学机器人模拟器。它提供了一个集成的开发环境&#xff0c;支持传感器、机械、机器人、环境的系统建模与仿真。Coppeli…