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

【Elasticsearch】简单搜索(三)

简介:Elasticsearch(ES)是一个开源的分布式搜索和分析引擎,用于快速存储、搜索和分析大量数据。它具有高性能、可扩展性和灵活性的特点,被广泛用于构建实时搜索、日志分析、数据可视化等应用。

这篇文章主要介绍检索相关的操作,单值、多值、范围、模糊等查询方式,使用bool支持多种条件复杂查询。

一、环境准备

版本

Docker version 20.10.22
elasticsearch:7.13.3
kibana:7.13.3
ps:具体启动命令参考第一篇ES博客

二、数据准备

下载官网测试数据

在ES官网中提供了简单的查询数据。点击下载示例数据 官方测试数据(bank)

使用postman导入到ES中

请求类型:POST
请求地址:http://127.0.0.1:9200/bank/account/_bulk?pretty
请求参数:binary类型,选择导入的json
image.png

Bank索引中的字段类型

执行命令GET bank/_mapping查看bank索引的字段类型为 “text”,在ES中 “text” 类型用于存储长文本数据,并进行全文索引。

address字段为例,其类型为 “text”,其中也存在子字段为 “keyword” 的字段,类型为 “keyword”。“keyword” 类型用于存储关键字或短文本数据,通常用于精确匹配和排序操作。
通过定义子字段,可以在同一个字段上同时使用不同类型的分析器和查询方式。对于 “address” 字段,你可以使用 “text” 类型进行全文搜索,同时也可以使用 “keyword” 类型进行精确匹配和排序。
ps:使用方式为 address.keyword

在这个示例中, “keyword” 子字段还定义了 “ignore_above” 属性,它指定了该子字段中的值超过256个字符时将被截断。这可以用来限制关键字的长度,以便控制索引大小和提高检索性能。

{"bank" : {"mappings" : {"properties" : {"account_number" : {"type" : "long"},"address" : {"type" : "text","fields" : {"keyword" : {"type" : "keyword","ignore_above" : 256}}}// 省略其他字段}}}
}

四、标准查询

匹配单个字段

通过以下命令查询索引 bank 中,地址含有 place 字样的数据,返回了 181 条。
此字段为 text,查询时会进行分词匹配,像 282 Kings Place会被ES进行分词,查询条件中含有分词后的单词,所以会被查出来。适合全文检索时使用。

其中 _score 返回值为匹配程度的一个得分,一定程度上讲,分值越大匹配越近似。

GET /bank/_search
{"query": {"match": {"address": "place"}}
}GET /bank/_search
{"query": {"term": {"address": "place"}}
}// 查询结果"hits" : [{"_index" : "bank","_type" : "account","_id" : "20","_score" : 1.7070332,"_source" : {"account_number" : 20,"balance" : 16418,"firstname" : "Elinor","lastname" : "Ratliff","age" : 36,"gender" : "M","address" : "282 Kings Place","employer" : "Scentric","email" : "elinorratliff@scentric.com","city" : "Ribera","state" : "WA"}},

精准匹配单个字段

上述查询在 address 后加上 keyword 的限制,那么这个字段就是 keyword 类型,只能进行精确查询,不再通过分词检索。age本身为数值型字段,不存在分词操作,查询全都是精确匹配。

GET /bank/_search
{"query": {"term": {"address.keyword": "282 Kings Place"}}
}GET /bank/_search
{"query": {"term": {"age": "32"}}
}

多值匹配单个字段

使用 terms 命令,可以对字段进行多种关键词搜索,效果如同关系型数据库的 in 查询。

GET /bank/_search
{"query": {"terms": {"age": ["32","33","34"]}}
}

范围查询

使用 range 关键词。参数含义如下

  • gt - 大于 ( > )
  • gte - 大于且等于 ( >= )
  • lt - 小于 ( < )
  • lte - 小于且等于 ( <= )
GET /bank/_search
{"query": {"range": {"age": {"gte": 32,"lte": 33}}}
}

模糊查询

模糊查询有多重方式,这里介绍两种,一种是模糊,一种是正则

GET /bank/_search
{"query": {"wildcard": {"firstname": {"value": "am*"}}}
}

四 、Bool组合查询

在ES中bool查询就是用来组合布尔查询条件,布尔查询条件,就是类似SQL中的and 、or 。
下面是一个复合查询语句,分别使用了mustfiltermust_notshould。下面的语句相当于SQL

SELECT* 
FROMbank 
WHEREgender = "M" AND state = "IA" AND city != "Healy" OR ( age = 39 OR age = 21)
POST bank/_search
{"query": {"bool": {"must": [{"match": {"gender.keyword": "M"}}],"filter": [{"match": {"state.keyword": "IA"}}],"must_not": [{"match": {"city.keyword": "Healy"}}],"should": [{"match": {"age": "39"}},{"match": {"age": "21"}}]}},"from": 0,"size": 10,"sort": [{"firstname.keyword": {"order": "desc"}}],"aggs": {}
}

查询关键词 Query Action

  1. 布尔查询:must,must_not,should等。类似SQL的and,or,! 等
  2. 匹配查询:match multi_match等。类似SQL的like
  3. 范围查询:range。类似SQL的大于,小于,等于
  4. term查询:term。类似SQL的 “=”
  5. 正则查询:regex 正则
  6. exists和missing查询:类似于SQL is null,is not null

查询语法总结

  • 最外层为query
  • 单重条件查询只需在 query 写入条件,复合查询条件包含在bool对象中

分页查询

from、size 分别对应 page 和 pageSize

排序

排序的写法就如一个对象,对象的 key 为字段名,value为排序规则,当然是可以多字段一起排序的,写入多个即可

查询关键词与分数关系

mustmust查询是必要条件,必须满足。参与相关性评分
filter与must类似,同样必须满足。不参与相关性评分,但结果集会被缓存
should如果只有一个 should 子句情况下与 must 子句结果一样,如果有多个should子句情况下,命中任何一个即可
must_not与must类似,同样必须不满足。不参与相关性评分,但结果集会被缓存

五、总结

  • 在ES中,如同普通SQL语句都有着类似API可以调用。
  • ES支持对内容进行分词,根据分词进行搜索,并对结果进行打分。适合对文章内容进行搜索,而关系型数据库例如 MySQL,对这个功能支持能力不强。
  • 查询语句在query内层套用 bool,可以支持多种条件过滤,同时也可以计算得分。

相关文章:

【Elasticsearch】简单搜索(三)

简介&#xff1a;Elasticsearch&#xff08;ES&#xff09;是一个开源的分布式搜索和分析引擎&#xff0c;用于快速存储、搜索和分析大量数据。它具有高性能、可扩展性和灵活性的特点&#xff0c;被广泛用于构建实时搜索、日志分析、数据可视化等应用。 这篇文章主要介绍检索相…...

【PMP/软考】软件需求的三个主要层次:业务需求、用户需求和功能需求解释及实例解析

简述 当进行需求分析时&#xff0c;通常着重考虑三个主要层次&#xff1a;业务需求、用户需求和功能需求。业务需求关注项目与组织战略目标的一致性&#xff0c;用户需求明确最终用户的期望&#xff0c;而功能需求定义具体的系统功能和特性。这三个层次为项目管理和软件工程提…...

Linux基础知识 总结

Linux基础知识 总结 1、Clion的简单介绍 CLion是以IntelliJ为基础&#xff0c;专为开发C及C所设计的跨平台IDE&#xff0c;可以在Windows、Linux及MacOS使用&#xff0c;这里我是在ubuntu 16.0.4基础上安装。2、下载 Linux版Clion的.tar.gz的压缩包 wget https://download.j…...

网上申请流量卡要不要身份证?填写的信息安全吗?

网上申请流量卡要不要身份证&#xff1f;当然是要的&#xff01; 现在直接从营业厅办理流量卡的很少了&#xff0c;都是直接在网上申请大流量卡&#xff0c;在这里小编提醒大家&#xff0c;在网上申请大流量卡和激活时都是需要提供个人证件的。 申请时提供身份证号是为了运营…...

关于计算机缺失vcruntime140.dll文件的解决方法分享

在计算机系统中&#xff0c;DLL&#xff08;动态链接库&#xff09;是一种特殊的文件类型&#xff0c;它包含了可以被多个程序共享的代码和数据。其中&#xff0c;VCRuntime140.dll是一个由Microsoft Visual C Redistributable package提供的运行时库文件&#xff0c;它为许多M…...

华为乾坤区县教育安全云服务解决方案(2)

本文承接&#xff1a; https://blog.csdn.net/qq_37633855/article/details/133276200?spm1001.2014.3001.5501 重点讲解华为乾坤区县教育安全云服务解决方案的部署流程。 华为乾坤区县教育安全云服务解决方案&#xff08;2&#xff09; 课程地址解决方案部署整体流程组网规划…...

PL/SQL异常抓取

目录 1. -- 什么是异常 2. 如何捕获预定义异常? 3.捕获异常的两个函数 SQLCODE :为错误代码返回一个数值 SQLERRM : 返回字符串的数据,包含了与错误相关的信息. 1. -- 什么是异常 DECLARE V_JOB EMP.JOB%TYPE; BEGIN SELECT JOB INTO V_JOB FROM EMP WHERE JOB CLERK; D…...

Java 18的未来:新特性和编程实践

文章目录 引言新特性预览1. 基于值的类的进一步改进2. 模式匹配的增强3. 新的垃圾回收器4. 扩展的模块系统5. 更强大的异步编程 编程实践示例1&#xff1a;基于值的类示例2&#xff1a;模式匹配的增强示例3&#xff1a;新的垃圾回收器 结论 &#x1f389;欢迎来到Java学习路线专…...

2024快手校招面试真题汇总及其解答(三)

11. 联合索引 联合索引是指包含多个列的索引,与之概念相对的是单列索引,仅包含一个数据列。在大多数情况下,建立多列索引的好处都要多于单列索引。 联合索引的优点 联合索引的优点如下: 提高查询效率:联合索引可以提高查询效率,特别是对于复杂的查询条件。减少磁盘IO:…...

【QandA C++】内存泄漏、进程地址空间、堆和栈、内存对齐、大小端和判断、虚拟内存等重点知识汇总

目录 内存泄漏 内存模型 、进程地址空间 堆和栈的区别 内存对齐 大端小端及判断 虚拟内存有什么作用 内存泄漏 概念: 是指因为疏忽或错误造成程序未能释放已经不再使用的内存的情况, 内存泄漏并不是指内存在物理上的消失, 而是应用程序分配了某段内存后, 因为设计错误…...

怒刷LeetCode的第12天(Java版)

目录 第一题 题目来源 题目内容 解决方法 方法一&#xff1a;贪心 第二题 题目来源 题目内容 解决方法 方法一&#xff1a;双指针 方法二&#xff1a;KMP算法 方法三&#xff1a;indexOf方法 方法四&#xff1a;Boyer-Moore算法 方法五&#xff1a;Rabin-Karp算法…...

RabbitMQ实现秒杀场景示例

本文章通过MQ队列来实现秒杀场景 整体的设计如下图&#xff0c;整个流程中对于发送发MQ失败和发送到死信队列的数据未做后续处理 1、首先先创建MQ的配置文件 Configuration public class RabbitConfig {public static final String DEAD_LETTER_EXCHANGE "deadLetterE…...

如何提升网站排名优化(百度SEO优化,轻松提升排名)

在当今互联网时代&#xff0c;拥有一个优秀的网站是很重要的。而一个网站如果能够在搜索引擎上的排名很靠前&#xff0c;那么将会带来更多的流量、更多的用户和更多的利润。那么如何提升网站排名优化呢&#xff1f;蘑菇号www.mooogu.cn 百度SEO优化的5个规则 1.关键词选取要合…...

CountDownLatch 和 CyclicBarrier 用法以及区别

在使用多线程执行任务时&#xff0c;通常需要在主线程进行阻塞等待&#xff0c;直到所有线程执行完毕&#xff0c;主线程才能继续向下执行&#xff0c;主要有以下几种可选方式 1. 调用 main 线程的 sleep 方法 一般用于预估线程的执行时间&#xff0c;在主线程内执行线程sleep…...

9.9喝遍“茶、奶、果、酒”,茶饮价格战是因为“无活可整”?

“家人们谁懂啊&#xff0c;周一瑞幸周二奈雪周三茶百道周四库迪周五古茗周六coco&#xff0c;9块9根本喝不完&#xff01;” 紧随咖啡的9.9大战&#xff0c;茶饮们也在今年加速“蜜雪冰城化”&#xff0c;9.9变成了一种潮流。伴随着茶百道、coco、奈雪的茶等品牌把9.9玩出了更…...

echarts 学习网址

1、PPChart 网址&#xff1a;PPChart - 让图表更简单 2、YX-Chartlib 网址&#xff1a;http://chartlib.datains.cn3、isqqw 网址&#xff1a;echarts图表集4、makeapie 网址&#xff1a;makeapie echarts社区图表可视化案例5、Chart.Top 网址&#xff1a;chart.top - 让图…...

android源码编译

整包编译 导入环境变量 source ./build/envsetup.shlunch&#xff1a;选择平台编译选项make&#xff1a;执行编译 编译单个apk 进入到apk mk所在路径 mma...

盘点双电机驱动技术

对于电动汽车来说&#xff0c;双电机相对于单电机加主减速器或变速箱的方案在提高驱动效率方面的优势&#xff1a; 第一&#xff0c;单电机在低速、高速轻载等情况下&#xff0c;效率降低比较严重。 电动机的高效区间虽然比内燃机大得多&#xff0c;但是汽车的转速和转矩要求…...

ubuntu下用pycharm专业版连接AI服务器及其docker环境

一&#xff1a;用pycharm专业版连接AI服务器 1、首先在自己电脑上新建一个文件夹&#xff0c;后续用于映射服务器上自己所要用的项目文件 2、用pycharm专业版打开该文件夹&#xff0c;作为一个项目打开 3、然后在工具->部署->配置 4、配置中形式如下&#xff1a; 点击左…...

IntentFilter笔记

一、action <intent-filter>中可以有多个action&#xff0c;Intent只要匹配其中1个action即匹配成功<intent-filter>没有action&#xff0c;任何Intent无法与之匹配<intent-filter>中有action&#xff0c;Intent中没有action时可以与之匹配成功<intent-fi…...

零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?

一、核心优势&#xff1a;专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发&#xff0c;是一款收费低廉但功能全面的Windows NAS工具&#xff0c;主打“无学习成本部署” 。与其他NAS软件相比&#xff0c;其优势在于&#xff1a; 无需硬件改造&#xff1a;将任意W…...

微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】

微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来&#xff0c;Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...

在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能

下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能&#xff0c;包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...

如何将联系人从 iPhone 转移到 Android

从 iPhone 换到 Android 手机时&#xff0c;你可能需要保留重要的数据&#xff0c;例如通讯录。好在&#xff0c;将通讯录从 iPhone 转移到 Android 手机非常简单&#xff0c;你可以从本文中学习 6 种可靠的方法&#xff0c;确保随时保持连接&#xff0c;不错过任何信息。 第 1…...

令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍

文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结&#xff1a; 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析&#xff1a; 实际业务去理解体会统一注…...

Python如何给视频添加音频和字幕

在Python中&#xff0c;给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加&#xff0c;包括必要的代码示例和详细解释。 环境准备 在开始之前&#xff0c;需要安装以下Python库&#xff1a;…...

大模型多显卡多服务器并行计算方法与实践指南

一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...

【Java_EE】Spring MVC

目录 Spring Web MVC ​编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 ​编辑参数重命名 RequestParam ​编辑​编辑传递集合 RequestParam 传递JSON数据 ​编辑RequestBody ​…...

鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/

使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题&#xff1a;docker pull 失败 网络不同&#xff0c;需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...

零知开源——STM32F103RBT6驱动 ICM20948 九轴传感器及 vofa + 上位机可视化教程

STM32F1 本教程使用零知标准板&#xff08;STM32F103RBT6&#xff09;通过I2C驱动ICM20948九轴传感器&#xff0c;实现姿态解算&#xff0c;并通过串口将数据实时发送至VOFA上位机进行3D可视化。代码基于开源库修改优化&#xff0c;适合嵌入式及物联网开发者。在基础驱动上新增…...