当前位置: 首页 > 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…...

Synopsys工具filter命令:从数据筛选到高效IC设计的实战指南

1. 项目概述&#xff1a;从“大海捞针”到“精准定位”的思维转变在IC设计领域&#xff0c;Synopsys的工具链是我们日常工作中不可或缺的伙伴。无论是DC、ICC2、PT还是VCS&#xff0c;我们每天都要与海量的数据、复杂的网表和成千上万的命令打交道。很多时候&#xff0c;我们面…...

STAR-CCM+物理场全览:从基础流动到前沿多物理场耦合

1. 流体与传热&#xff1a;STAR-CCM的仿真基石 流动与传热仿真是工程模拟中最基础也最常用的功能。在STAR-CCM中&#xff0c;这两个物理场就像盖房子的地基&#xff0c;后续所有高级功能都建立在这个基础之上。我刚开始接触CFD时&#xff0c;花了整整三个月时间专门研究这两个模…...

G-Helper终极指南:如何彻底解决华硕笔记本散热与性能管理难题

G-Helper终极指南&#xff1a;如何彻底解决华硕笔记本散热与性能管理难题 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops with nearly the same functionality. Works with ROG Zephyrus, Flow, TUF, Strix, Scar, ProArt, Vivobook, Zenb…...

NotebookLM与国家智慧教育平台对接全路径(含教育部2024年最新接口规范V2.3解读)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;NotebookLM教育领域应用概览 NotebookLM 是 Google 推出的基于 AI 的笔记增强型研究助手&#xff0c;专为深度阅读、知识整合与教学辅助设计。在教育场景中&#xff0c;它能将教师上传的 PDF 教材、课…...

Taotoken的Token Plan套餐如何帮助个人开发者更可控地规划AI支出

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 Taotoken的Token Plan套餐如何帮助个人开发者更可控地规划AI支出 对于个人开发者或小型项目团队而言&#xff0c;大模型API的调用成…...

解密猫抓:当浏览器成为你的私人视频档案管理员

解密猫抓&#xff1a;当浏览器成为你的私人视频档案管理员 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 你是否曾盯着浏览器中那个精彩的在线讲座…...

独立开发者如何借助Taotoken多模型能力打造全能AI助手应用

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 独立开发者如何借助Taotoken多模型能力打造全能AI助手应用 对于独立开发者或小型工作室而言&#xff0c;构建一个功能全面的AI助手…...

ESP32-S2物联网实战:IPv6配置与Adafruit IO双向通信

1. 项目概述与核心价值如果你手头有一块ESP32-S2开发板&#xff0c;并且已经厌倦了仅仅让它连上Wi-Fi、点个灯&#xff0c;想让它真正“活”起来&#xff0c;成为一个能融入现代互联网、能与云端自由对话的智能节点&#xff0c;那么这篇文章就是为你准备的。我们将深入两个在物…...

终极macOS清理神器:Pearcleaner 3步彻底卸载应用不留痕迹

终极macOS清理神器&#xff1a;Pearcleaner 3步彻底卸载应用不留痕迹 【免费下载链接】Pearcleaner A free, source-available and fair-code licensed mac app cleaner 项目地址: https://gitcode.com/gh_mirrors/pe/Pearcleaner 你是否曾将macOS应用拖入废纸篓后&…...

告别混乱信号!用CANdb++ Editor从零搭建汽车CAN网络DBC文件(保姆级图文教程)

告别混乱信号&#xff01;用CANdb Editor从零搭建汽车CAN网络DBC文件&#xff08;保姆级图文教程&#xff09; 在汽车电子开发领域&#xff0c;CAN总线如同神经脉络般贯穿整车系统。我曾参与过一个新能源整车项目&#xff0c;由于早期缺乏规范的DBC文件&#xff0c;不同ECU厂商…...