Elasticsearch中各种query的适用场景

news2024/12/24 8:52:47

Elasticsearch

Elasticsearch 提供了丰富的 Query 类型,以满足各种搜索需求。以下列举一些常见的 Query 类型,并分析其区别和应用场景:

一、 几个常用的基本Query

1. Term Query

  • 应用场景: 查找包含特定词语的文档,适合精确匹配单个词语的场景。
  • 特点: 与其他 Query 相比,Term Query 要求完全匹配目标词语。
  • 语法示例:{ "query": { "term": { "title": "apple" } } }
    • 该示例将匹配所有 title字段值为 “apple” 的文档。

2. Match Query

  • 应用场景: 查找包含与目标词语相似或相关的词语的文档,适合模糊匹配文本。
  • 特点: Match Query 允许部分匹配和词形变化,可以理解为对 Term Query 的扩展。
  • 语法示例:{ "query": { "match": { "title": "iphone" } } }
    • 该示例将匹配包含 “iphone”、”iPhones”、”iPhone” 等词语的文档。

3. Match Phrase Query

  • 应用场景: 查找包含特定短语的文档,要求短语中的词语顺序必须一致。
  • 特点: 不同于 Match Query 允许词序变化,Match Phrase Query 需要精确匹配短语中的所有词语,并保持其顺序。
  • 语法示例:{ "query": { "match_phrase": { "description": "apple iphone 15" } } }
    • 该示例将匹配包含 “apple iphone 15” 这个完整短语的文档。

4. Wildcard Query

  • 应用场景: 查找包含特定模式的词语的文档,支持使用 “*” 和 “?” 通配符,类似SQL中的LIKE。
  • 特点: Wildcard Query 允许使用通配符匹配多个字符,灵活度更高,但这个查询效率比较较低,影响ES的性能,所以非必要是不建议用Wildcard Query的。
  • 语法示例:{ "query": { "wildcard": { "title": "app*" } } }
    • 该示例将匹配所有以 “app” 开头的 title字段值,例如 “apple”、”appliance” 等。

5. Prefix Query

  • 应用场景: 查找包含以特定前缀开头的词语的文档。
  • 特点: Prefix Query 只匹配以特定前缀开头的词语,效率更高。
  • 语法示例:{ "query": { "prefix": { "title": "app" } } }
    • 该示例将匹配所有以 “app” 开头的 title字段值,例如 “apple”、”appliance” 等。

6. Range Query

  • 应用场景: 查找满足特定条件的数值或日期范围的文档。
  • 特点: Range Query 可以指定数值或日期范围,并使用 “gte”、”gt”、”lte”、”lt” 等参数控制范围。
  • 语法示例:{ "query": { "range": { "price": { "gte": 100, "lte": 200 } } } }
    • 该示例将匹配所有 price 字段值在 100 到 200 之间的文档。

二、 复杂查询构造

  • Bool Query: 可以组个多个query,同时使用 “must”, “should”, “must_not” 构建复杂条件查询,例如查找所有价格在 100 元到 200 元之间且标题为 “apple” 的产品。
    • 语法示例:
    { "query": { "bool": { "must": [ { "range": { "price": { "gte": 100, "lte": 200 } } }, { "term": { "title": "apple" } } ] } } }
  • Exists Query: 检查字段是否存在,查找包含特定字段的文档,例如查找所有包含 “description” 字段的文档。
    • 语法示例:
    { "query": { "exists": { "field": "description" } } }
  • Missing Query: 与上面相反检查字段是否不存在,查找不包含特定字段的文档,例如查找所有不包含 “description” 字段的文档。。
    • 语法示例:
    { "query": { "missing": { "field": "description" } } }

三、 几个特殊场景的 Query

  • Geo Distance Query: 查找按地理位置距离查找,例如查找距离用户当前位置 10 公里内的商店。
    • 语法示例:
    { "query": { "geo_distance": { "distance": "10km", "location": { "lat": 40.7128, "lon": -74.0060 } } } }
  • Nested Query: 对嵌套对象进行查询,例如查询每个用户的订单信息。
    • 语法示例:
    { "query": { "nested": { "path": "orders", "query": { "match": { "orders.product": "apple" } } } } }
  • Regexp Query: 使用正则表达式进行匹配,例如下面是一个查找所有包含电子邮件地址的例子。
    • 语法示例:
    { "query": { "regexp": { "email": ".+@.+\\..+" } } }
  • Fuzzy Query: 查找包含与目标词语相似或相关的词语的文档,例如查找所有包含 “appl” 或 “apple” 的产品。
    • 语法示例:
    { "query": { "fuzzy": { "title": { "value": "iphon", "fuzziness": 1 } } } }

四、 QueryString 和 Simple Query String

这两个query可以根据条件构建定制化的查询条件

  • QueryString Query: 支持使用 Lucene 语法进行复杂查询。
    • 语法示例:
    { "query": { "query_string": { "query": "brand:Apple AND price:[100 TO 200]" } } }
    • 应用场景: 自定义复杂查询条件,例如使用 “AND” 或 “OR” 连接多个条件。
  • Simple Query String Query: 简化的查询语法,支持基础的逻辑操作。
    • 语法示例:
    { "query": { "simple_query_string": { "query": "apple price > 100" } } }
    • 应用场景: 简单查询,例如查找包含 “apple” 并且价格大于 100 的产品。

选择合适的 Query 类型取决于具体的搜索需求,建议根据数据结构和搜索目的选择合适的 Query 类型,以提高查询效率和准确性。希望本文能帮助你更好地理解 Elasticsearch 中的 Query 类型,并灵活运用这些 Query 类型进行高效的搜索。

文章地址 Elasticsearch中各种query的适用场景 – AI小站 (aisites.cn)

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

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

相关文章

AI 大模型重点行业应用情况

1、AI 大模型重点行业应用情况总览 AI大模型将率先在互联网办公、金融等数字化程度较高的行业快速渗透,医疗、交通、 制造等行业的潜在渗透空间大。 2、AI 大模型在金融行业应用情况 金融行业的应用场景丰富,是最早进行数字化转型的机构,因此…

计算机网络 —— 网络层 (路由协议)

计算机网络 —— 网络层 (路由协议) 什么是路由协议内部网关协议RIP关键特性 OSPF主要特点 外部网关协议BGP关键特性 我们今天来看路由协议: 什么是路由协议 路由协议是网络设备(主要是路由器)用来决定数据包在网络中…

Channels无法使用ASGI问题

Django Channels是一个基于Django的扩展, 用于处理WebSockets, 长轮询和触发器事件等实时应用程序. 它允许Django处理异步请求, 并提供了与其他WebSockets库集成的功能.当我们在Django Channels中使用ASGI_APPLICATION设置时, 我们可以指定一个新的ASGI应用程序来处理ASGI请求.…

按键精灵安装有乱码并且不能启动的解决办法

在国外购了电脑,系统是英文版 Windows 11,按键精灵死活都装不上去,打开exe的安装文件后出现乱码,安装完了后还是乱码,并且启动不了,以下是解决办法: 进入控制面板,并且点 Region&am…

redis windos修复版本

遇到的问题: Django的channel插件连接安装在windows上的redis报错: unknown command BZPOPMIN, channels-redis版本和redis不兼容导致.解决方案: 更新Redis版本. 微软官方维护的 Redishttps://github.com/microsoftarchive/redis/releases 2016年后就不更新了, 版本停留在了3.x…

HikariCP连接池初识

HikariCP的简单介绍 hikari-光,hikariCP取义:像光一样轻和快的Connetion Pool。这个几乎只用java写的中间件连接池,极其轻量并注重性能,HikariCP目前已是SpringBoot默认的连接池,伴随着SpringBoot和微服务的普及&…

数据结构之线性表(1)

数据结构之线性表 1.线性表的定义 线性表是一种线性结构。在一个线性表中数据元素的类型是相同的,或者说线性表是由同一类型的数据元素构成的线性结构。 线性表是具有相同数据类型的n(n>0)个数据元素的有限序列。 n表示表长,…

java版多语言抢单系统 多语言海外AEON抢单可连单加额外单源码 抢单平台搭建开发 抢单开挂的软件

此套是全新开发的java版多语言抢单系统。 后端java,用的若依框架,这套代码前后端是编译后的,测试可以正常使用,语言繁体,英文,日语 源码大小:155M 源码下载:https://download.csd…

QT系列教程(10) QTextEdit学习

简介 QTextEdit是文本编辑器,支持富文本功能。接下来我们创建一个Qt Application 应用,然后在ui中添加一个QTextEdit插件。 运行程序后,可以在QTextEdit中输入任何文字也包括富文本。 文本块 我们在MainWindow的ui文件中添加了textedit插件…

iOS--block再学习

block再学习 什么是blockblock是带有自动变量的匿名函数block语法 block的实现block的实质截获自动变量__blcok说明符Block存储域__block变量存储域使用__block变量用结构体成员变量__forwarding的原因 截获对象 什么是block Block时c语言的扩充功能,它允许开发者定…

图像处理方向信息

前言 Exif 规范 定义了方向标签,用于指示相机相对于所捕获场景的方向。相机可以使用该标签通过方向传感器自动指示方向,也可以让用户通过菜单开关手动指示方向,而无需实际转换图像数据本身。 在图像处理过程中,若是原图文件包含…

中间件学习-RocketMQ-从零到一学习-2RocketMQ 的工作原理

中间件学习-RocketMQ-从零到一学习-2RocketMQ 的工作原理 RocketMQ 工作原理 1. 启动 NameServer 启动 NameServer。NameServer 启动后监听端口,等待 Broker、Producer、Consumer 连接,相当于一个路由控制中心。 2. 启动 Broker 启动 Broker。与所有…

ansible.cfg forks参数

在Ansible的配置文件ansible.cfg中,forks参数是一个非常关键的设置,它控制了Ansible执行任务时的并发连接数,直接影响到Ansible执行 playbook 或 ad-hoc 命令时的速度和效率。 意义与作用 并发控制:当你使用Ansible来管理多台主…

VRRP基础配置(华为)

#交换设备 VRRP基础配置 VRRP (Virtual Router Redundancy Protocol) 全称是虚拟路由规元余协议,它是一种容错协议。该协议通过把几台路由设备联合组成一台虚拟的路由设备,该虚拟路由器在本地局域网拥有唯一的一个虚拟 ID 和虚拟 IP 地址。实际上&…

计算机毕业设计python+spark知识图谱音乐推荐系统 音乐数据分析可视化大屏 音乐爬虫 LSTM情感分析 大数据毕设 深度学习 机器学习

流程: 1.Python采集网易云音乐歌手、歌词、音乐、评论等约10-20万海量数据,存入mysql数据库; 2.使用pandasnumpy/MapReduce对mysql中四类数据进行数据清洗,写入.csv文件并上传至hdfs(含评论NLP文本分类/lsm情感分析); 3.使用hive建…

LVGL移植和图片显示

最近闲来无事,偶尔刷到了移植LVGL的教程,今天肝完了机械原理又移植完LVGL库,真是收获满满的一天,先接一杯水去。 回来了,发个朋友圈高级一下,好困。 lvgl v8.3移植及组件使用_lvgl界面编辑器-CSDN博客htt…

nlp学习笔记

目录 很多入门例子 bert chinese 很多入门例子 https://github.com/lansinuote/Huggingface_Toturials bert chinese import torch import torch.nn as nn from transformers import AutoTokenizer, AutoModel, BertModel, TFBertModel, BertTokenizer# youpath = D:/bert-…

任务调度选择之PowerJob 和 Snail Job

背景 最近在选择一款任务调度产品,找了几款产品进行调研,我对产品的要求是可以进行可视化、有角色权限、任务编排、支持http、接入成本低等,发现有有两款挺符合的PowerJob和Snail Job。 同类产品对比 Elastic-Jobxxl-jobPowerJobSnail Job…

c#自定义ORM框架-实体类扩展属性

步骤一、建立扩展属性类 实体类扩展属性要继承Attribute基类完成 步骤二、创建实体类并引用扩展实体类属性 Attributes属性定义&#xff0c;主要标明表名和主键名字 /// <summary> /// 表名 /// </summary> [AttributeUsage(AttributeTargets.Class)] [System.S…

C语言之存储类、作用域、生命周期、链接属性

一 &#xff1a;概念解析 1&#xff1a; 存储类 &#xff08;1&#xff09;存储类就是存储类型&#xff0c;就是描述C语言变量存储在什么地方 &#xff08;2&#xff09;内存有多种管理方法&#xff1a;栈、堆数据段、bss段、.text段......一个变量的存储类属性就是描述…