ElasticSearch-DSL
- 查询所有 match_all
- 分页查询 from + size
- 深分页查询 Scroll
- 指定字段排序 sort
- 返回指定字段
_source
- match
- 短语查询 match_phrase
- 多字段查询 multi_match
- query_string
- simple_query_string
- 关键词查询 Term
- 结构化搜索
- 前缀查询 prefix
- 通配符查询 wildcard
- 范围查询 range
- 多 id 查询 ids
- 模糊查询 fuzzy
- 高亮 highlight
- Query DSL(Domain Specified Language)是利用Rest API传递JSON格式的请求体(RequestBody)与ES进行交互
查询所有 match_all
- 使用match_all,默认只会返回10条数据
_search
查询默认采用的是分页查询,每页记录数size的默认值为10- 如果想显示更多数据,指定size
GET /es_db/_search
# 等同于
GET /es_db/_search
{"query":{"match_all":{}}}
分页查询 from + size
- 返回指定条数size
- size 关键字: 指定查询结果中返回指定条数。 默认返回值10条
- from + size的结果必须小于或等于10000
- 可以采用scroll api更高效的请求大量数据集
GET /es_db/_search
{"query":{"match_all":{}},"size": 100}
- 查询结果的窗口的限制可以通过参数index.max_result_window进行设置
- index.max_result_window主要用来限制单次查询满足查询条件的结果窗口的
- 不能简单理解成查询返回给调用方的数据量
- 窗口大小由from + size共同决定
- 主要是为了限制内存的消耗
- 尽管最后我们只取了10条数据返回给客户端,但ES进程执行查询操作的过程中确需要将(1000000 + 10)的记录都加载到内存中
- 这也是ES中不推荐采用(from + size)方式进行深度分页的原因
- index.max_result_window主要用来限制单次查询满足查询条件的结果窗口的
PUT /es_db/_settings
{"index.max_result_window":"20000"}
# 修改所有的索引
PUT /_all/_settings
{"index.max_result_window":"20000"}
- 分页查询 form
- from 关键字: 用来指定起始返回位置,和size关键字连用可实现分页效果
GET /es_db/_search
{"query":{"match_all":{}},"size":5,"from":0}
深分页查询 Scroll
- 查询命令中新增 scroll=1m,说明采用游标查询,保持游标查询窗口一分钟
GET /es_db/_search?scroll=1m
{"query":{"match_all":{}},"size":2}
- 采用游标id查询
- 多次根据scroll_id游标查询,直到没有数据返回则结束查询
- 采用游标查询索引全量数据,更安全高效,限制了单次对内存的消耗
GET /_search/scroll
{"scroll":"1m","scroll_id":"FGluY2x1ZGVfY29udGV4dF91dWlkDXF1ZXJ5QW5kRmV0Y2gBFmNwcVdjblRxUzVhZXlicG9HeU02bWcAAAAAAABmzRY2YlV3Z0o5VVNTdWJobkE5Z3MtXzJB"}
指定字段排序 sort
- 会让得分失效
GET /es_db/_search
{"query":{"match_all":{}},"sort":[{"age":"desc"}]}
返回指定字段_source
_source
关键字: 是一个数组,在数组中用来指定展示那些字段
GET /es_db/_search
{"query":{"match_all":{}},"_source":["name","address"]}
match
- match在匹配时会对所查找的关键词进行分词,然后按分词匹配查找
- query : 指定匹配的值
- operator : 匹配条件类型
- and : 条件分词后都要匹配
- or : 条件分词后有一个匹配即可 (默认)
- minmum_should_match : 最低匹配度,即条件在倒排索引中最低的匹配度
# 模糊匹配 match 分词后 or 的效果
GET /es_db/_search
{"query":{"match":{"address":"广州白云山公园"}}}
# 分词后 and 的效果
GET /es_db/_search
{"query":{"match":{"address":{"query":"广州白云山公园","operator":"AND"}}}}
- 当operator参数设置为or时,minnum_should_match参数用来控制匹配的分词的最少数量
# 最少匹配 广州,公园 两个词
GET /es_db/_search
{"query":{"match":{"address":{"query":"广州公园","minimum_should_match":2}}}}
短语查询 match_phrase
- match_phrase 查询分析文本并根据分析的文本创建一个短语查询
- match_phrase 会将检索关键词分词
- match_phrase 的分词结果必须在被检索字段的分词中都包含,而且顺序必须相同,而且默认必须都是连续的
GET /es_db/_search
{"query":{"match_phrase":{"address":"广州白云山"}}}
- address 改成”广州白云“可能查不出数据
- 广州和白云不是相邻的词条,中间会隔一个白云山
- 而match_phrase匹配的是相邻的词条
- 可以借助slop参数解决词条间隔的问题
- slop参数告诉match_phrase查询词条能够相隔多远时仍然将文档视为匹配
# 广州云山分词后相隔为 2,可以匹配到结果
GET /es_db/_search
{"query":{"match_phrase":{"address":{"query":"广州云山","slop":2}}}}
多字段查询 multi_match
- 可以根据字段类型,决定是否使用分词查询,得分最高的在前面
- 字段类型分词,将查询条件分词之后进行查询,如果该字段不分词就会将查询条件作为整体进行查询
GET /es_db/_search
{"query":{"multi_match":{"query":"长沙张龙","fields":["address","name"]}}}
query_string
- 允许我们在单个查询字符串中指定 AND | OR | NOT 条件,同时也支持多字段搜索
- 在所有字段中搜索
- 查询字段分词就将查询条件分词查询,查询字段不分词将查询条件不分词查询
- 未指定字段查询
GET /es_db/_search
{"query":{"query_string":{"query":"张三 OR 橘子洲"}}}
- 指定单个字段查询
GET /es_db/_search
{"query":{"query_string":{"default_field":"address","query":"白云山 OR 橘子洲"}}}
- 指定多个字段查询
GET /es_db/_search
{"query":{"query_string":{"fields":["name","address"],"query":"张三 OR (广州 AND 王五)"}}}
simple_query_string
- 类似 Query String,但是会忽略错误的语法
- 同时只支持部分查询语法,不支持 AND OR NOT,会当作字符串处理
- 支持部分逻辑
- + 替代 AND
- | 替代 OR
- 替代 NOT
- 默认的 operator 是 OR
GET /es_db/_search
{"query":{"simple_query_string":{"fields":["name","address"],"query":"广州公园","default_operator":"AND"}}}
关键词查询 Term
- Term 用来使用关键词查询 (精确匹配),还可以用来查询没有被进行分词的数据类型
- Term 是表达语意的最小单位
- match 在匹配时会对所查找的关键词进行分词,然后按分词匹配查找
- 而 term 会直接对关键词进行查找
- 一般模糊查找的时候,多用 match,而精确查找时可以使用 term
- 只有 text 类型分词
- Term 查询,对输入不做分词
- 会将输入作为一个整体,在倒排索引中查找准确的词项
- 并且使用相关度算分公式为每个包含该词项的文档进行相关度算分
GET /es_db/_search
{"query":{"term":{"address":{"value":"广州白云"}}}}
- 可以通过 Constant Score 将查询转换成一个 Filtering,避免算分,并利用缓存,提高性能
- 将 Query 转成 Filter,忽略 TF-IDF 计算,避免相关性算分的开销
- Filter 可以有效利用缓存
GET /es_db/_search
{"query":{"constant_score":{"filter":{"term":{"address.keyword":"广州白云山公园"}}}}}
结构化搜索
- 结构化搜索 (Structured search) 是指对结构化数据的搜索
- 结构化数据
- 日期,布尔类型和数字都是结构化的
- 文本也可以是结构化的
- 如彩色笔可以有离散的颜色集合:红 (red) 、绿 (green)、蓝 (blue)
- 一个博客可能被标记了标签,例如,分布式 (distributed) 和搜索 (search)
- 电商网站上的商品都有 UPC (通用产品码 Universal Product Code) 或其他的唯一
- 它们都需要遵从严格规定的、结构化的格式
- 应用场景:对 bool,日期,数字,结构化的文本可以利用 term 做精确匹配
- term 处理多值字段
- term查询是包含,不是等于
前缀查询 prefix
- 它会对分词后的 term 进行前缀搜索
- 它不会分析要搜索的字符串,传入的前缀就是想要查找的前缀
- 默认状态下,前缀查询不做相关度分数计算,它只是将所有匹配的文档返回,然后赋予所有相关分数值为1
- 它的行为更像是一个过滤器而不是查询
- 两者实际的区别就是过滤器是可以被缓存的,而前缀查询不行
- prefix 的原理:需要遍历所有倒排索引,并比较每个 term 是否已所指定的前缀开头
GET /es_db/_search
{"query":{"prefix":{"address":{"value":"广州"}}}}
通配符查询 wildcard
- 通配符查询:工作原理和 prefix 相同,只不过它不是只比较开头,它能支持更为复杂的匹配模式
GET /es_db/_search
{"query":{"wildcard":{"address":{"value":"*白*"}}}}
范围查询 range
- range 范围关键字
- gte 大于等于
- lte 小于等于
- gt 大于
- lt 小于
- now 当前时间
POST /es_db/_search
{"query":{"range":{"age":{"gte":25,"lte":28}}}}
- 日期 range
GET /product/_search
{"query":{"range":{"date":{"gte":"now‐2y" }}}}
多 id 查询 ids
- ids 关键字 : 值为数组类型,用来根据一组 id 获取多个对应的文档
GET /es_db/_search
{"query":{"ids":{"values":[1,2]}}}
模糊查询 fuzzy
- 使用 fuzziness 属性来进行模糊查询,从而达到搜索有错别字的情形
- fuzzy 查询会用到两个很重要的参数,fuzziness,prefix_length
- fuzziness:表示输入的关键字通过几次操作可以转变成为 ES 库里面的对应 field 的字段
- 操作是指:新增一个字符,删除一个字符,修改一个字符,每次操作可以记做编辑距离为 1
- 如中文集团到中威集团编辑距离就是1,只需要修改一个字符
- 该参数默认值为0,即不开启模糊查询
- 操作是指:新增一个字符,删除一个字符,修改一个字符,每次操作可以记做编辑距离为 1
- prefix_length:表示限制输入关键字和ES对应查询field的内容开头的第n个字符必须完全匹配,不允许错别字匹配
- 如这里等于1,则表示开头的1个字必须匹配,不匹配则不返回
- 默认值也是0
- 加大prefix_length的值可以提高效率和准确率
- fuzziness:表示输入的关键字通过几次操作可以转变成为 ES 库里面的对应 field 的字段
- fuzzy 模糊查询 最大模糊错误 必须在0-2之间
- 搜索关键词长度为 2,不允许存在模糊
- 搜索关键词长度为3-5,允许1次模糊
- 搜索关键词长度大于5,允许最大2次模糊
GET /es_db/_search
{"query":{"fuzzy":{"address":{"value":"白运山","fuzziness":1}}}}
高亮 highlight
- highlight 关键字:可以让符合条件的文档中的关键词高亮
- pre_tags 前缀标签
- post_tags 后缀标签
- tags_schema 设置为styled可以使用内置高亮样式
- require_field_match 多字段高亮需要设置为false
GET /products/_search
{"query":{"term":{"name":{"value":"牛仔"}}},"highlight":{"fields":{"*":{}}}}
- 自定义高亮 html 标签
- 可以在 highlight 中使用 pre_tags 和 post_tags
- 多字段高亮:require_field_match 设置为 false
GET /products/_search
{"query":{"term":{"name":{"value": "牛仔"}}},"highlight":{"post_tags":["</span>"],"pre_tags":["<span style='color:red'>"], # 多字段高亮"require_field_match":"false","fields":{"*":{}}}}
相关文章:
ElasticSearch-DSL
查询所有 match_all 分页查询 from size深分页查询 Scroll指定字段排序 sort返回指定字段_sourcematch 短语查询 match_phrase多字段查询 multi_matchquery_string simple_query_string 关键词查询 Term 结构化搜索 前缀查询 prefix通配符查询 wildcard范围查询 range多 id 查…...

Learn ComputeShader 07 Post Processing
这次我们将使用计算机着色器对图像进行后处理。 要进行后处理需要将渲染图像从cpu传递给gpu,并在gpu对图像进行处理然后传回cpu。 首先创建一个后处理基类BasePP 首先声明需要用到的属性。 using System.Collections; using System.Collections.Generic; using …...

初始QT!
作业:了解QT文件夹初始代码的意义 QT core gui #QT工程所需得类库 core是核心库 gui图形化界面相关库类 greaterThan(QT_MAJOR_VERSION, 4): QT widgets #版本超过4.0会加上widgetsCONFIG c11 #该编辑器支持c11后的版本 # The following define makes you…...

全国大学生数据建模比赛——深度学习
全国大学生数学建模比赛中,深度学习可以成为解决复杂问题的有力手段。 一、深度学习的优势在比赛中的体现 强大的模式识别能力:深度学习模型,如卷积神经网络(CNN)和循环神经网络(RNN)࿰…...

Qt技巧(二)-滑动界面,轮询控件,循环操作控件
在Qt界面开发过程中,我们常常要对同类部件,具有同样功能的一系列部件进行操作,比如: 这个页面该怎么设计,中间的几个选项该怎么操作? 我们在主工程中添加一个设计师界面类,类名设置为“BrandF…...

003——单链表
1.链式存储的特点 逻辑(通过指针实现)上相邻,物理上可相邻可不相邻 2.结点(节点都可以) 4(&8) 8(&6) 6(&1) 1(&…...
XILINX平台下LINUX DMA驱动调研
专栏目录 高质量文章导航-持续更新中-CSDN博客 基础概念 VA:virtual address称为虚拟地址, PA:physical address称为物理地址。 CPU通过地址来访问内存中的单元,如果CPU没有MMU,或者有MMU但没有启动,那么CPU内核在取指令或者访问内存时发出的地址(此时必须是物理地址…...
Oracle数据库安装和配置指南
Oracle数据库是一款功能强大的企业级关系数据库管理系统(RDBMS),广泛应用于各种规模的企业和组织。其强大的性能和丰富的功能使其成为数据库管理的首选解决方案之一。以下是关于如何安装和配置 Oracle 数据库的详细指南。 一、准备工作 在开…...

制造业中工艺路线(工序)与产线(工作中心)关系
一.工艺路线与生产线是数字孪生中的虚实关系: 1.工艺路线为虚,生产线体为实; 2.工艺路线指导生产线的生产组织,生产线承载工艺路线的能力,把虚拟的生产信息流变成真实的产流。 二.工艺路线与生产线是数字孪生中互为“…...
目标跟踪算法——ByteTrack算法原理解析
文章目录 ByteTrack1. ByteTrack算法步骤:2. 算法解释2.1 模型初始化2.2 模型更新算法流程2.2.1 检测结果划分,划分为高分和较低分段2.2.2 高分段处理手段2.2.3 最优匹配与未匹配划分2.2.4 低分框再匹配2.2.5 未确认轨迹处理2.2.6 更新状态 2.3 匈牙利匹…...

C语言编译的过程
文章目录 1. 预处理(Preprocessing)2. 编译(Compilation)3. 汇编(Assembly)4. 链接(Linking)总结 c语言通过编译器直接编译成机器语言程序。 C语言程序的编译过程通常分为四个主要步…...

前端面试题——栈与队列、动态路由、链表
栈、队列与链表 Java数据结构栏目总结-CSDN博客 栈(Stack) 栈是一种后进先出(LIFO, Last In First Out)的数据结构。它只允许在栈顶进行添加(push)或删除(pop)元素的操作。 基本操…...
Java算法之计数排序(Counting Sort)
简介 计数排序是一种线性时间复杂度的排序算法,它不依赖于元素之间的比较,而是通过统计数组中每个元素出现的次数,然后根据这些统计信息对元素进行排序。这种算法特别适用于整数且整数的范围不是非常大时。 算法步骤 找出数组中的最大值。…...

【系统架构设计师-2012年】综合知识-答案及详解
更多内容请见: 备考系统架构设计师-核心总结索引 文章目录 【第1~2题】【第3~4题】【第5题】【第6题】【第7题】【第8题】【第9题】【第10~11题】【第12~13题】【第14~19题】【第20~21题】【第22~24题】【第25~26题】【第27~31题】【第32~33题】【第34~36题】【第37…...

webpack4手动搭建Vue项目
小满视频 很多解释使用通义灵码搜的,通义灵码的搜索结果也是有错误的全程使用pnpm包管理工具,和npm的用法基本一样 学习总结 1. 多看看webpack官网 2. webpack的作用:配置一堆东西,达到运行程序的目的 3. 无论什么东西都转成js,…...
Python爬虫所需的技术及其原理(简单易懂)
导言 随着互联网的发展,大量的数据被存储在网络上,而我们需要从中获取有用的信息。Python作为一种功能强大且易于学习的编程语言,被广泛用于网络爬虫的开发。本文将详细介绍Python爬虫所需的技术及其原理,并提供相关的代码案例。…...

FxFactory 8 for Mac 视觉特效插件包安装
Mac分享吧 文章目录 介绍页面效果一、下载软件二、开始安装1、Install安装2、显示软件页面,表示安装成功3、补丁安装 三、注意事项1、若已安装过其他版本,需要使用软件自带的卸载功能进行软件卸载,再安装此版本 安装完成!&#x…...

将语义分割的标签转换为实例分割(yolo)的标签
语义分割的标签(目标处为255,其余处为0) 实例分割的标签(yolo.txt),描述边界的多边形顶点的归一化位置 绘制在原图类似蓝色的边框所示。 废话不多说,直接贴代码; import os import cv2 imp…...
QT 遍历ini配置文件
在 Qt 中,处理 INI 配置文件是一项常见任务,通常使用 QSettings 类来读取和写入这些文件。QSettings 提供了一种方便的方式来操作 INI 文件中的配置数据。下面是如何使用 QSettings 遍历和处理 INI 配置文件的示例。 示例代码 假设有一个名为 config.i…...

ecmascript和javascript的区别详细讲解
大家好,我是程序员小羊! 前言: ECMAScript 和 JavaScript是紧密相关的术语,但它们有着各自明确的定义和用途。要理解它们的区别,首先需要从它们的起源、发展历史、技术架构以及具体应用领域来分析。以下是对它们的详…...

超短脉冲激光自聚焦效应
前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应,这是一种非线性光学现象,主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场,对材料产生非线性响应,可能…...

YSYX学习记录(八)
C语言,练习0: 先创建一个文件夹,我用的是物理机: 安装build-essential 练习1: 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件,随机修改或删除一部分,之后…...

dedecms 织梦自定义表单留言增加ajax验证码功能
增加ajax功能模块,用户不点击提交按钮,只要输入框失去焦点,就会提前提示验证码是否正确。 一,模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...

CMake 从 GitHub 下载第三方库并使用
有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...
2023赣州旅游投资集团
单选题 1.“不登高山,不知天之高也;不临深溪,不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...

MySQL 知识小结(一)
一、my.cnf配置详解 我们知道安装MySQL有两种方式来安装咱们的MySQL数据库,分别是二进制安装编译数据库或者使用三方yum来进行安装,第三方yum的安装相对于二进制压缩包的安装更快捷,但是文件存放起来数据比较冗余,用二进制能够更好管理咱们M…...

FFmpeg:Windows系统小白安装及其使用
一、安装 1.访问官网 Download FFmpeg 2.点击版本目录 3.选择版本点击安装 注意这里选择的是【release buids】,注意左上角标题 例如我安装在目录 F:\FFmpeg 4.解压 5.添加环境变量 把你解压后的bin目录(即exe所在文件夹)加入系统变量…...
前端调试HTTP状态码
1xx(信息类状态码) 这类状态码表示临时响应,需要客户端继续处理请求。 100 Continue 服务器已收到请求的初始部分,客户端应继续发送剩余部分。 2xx(成功类状态码) 表示请求已成功被服务器接收、理解并处…...
JS红宝书笔记 - 3.3 变量
要定义变量,可以使用var操作符,后跟变量名 ES实现变量初始化,因此可以同时定义变量并设置它的值 使用var操作符定义的变量会成为包含它的函数的局部变量。 在函数内定义变量时省略var操作符,可以创建一个全局变量 如果需要定义…...

Axure零基础跟我学:展开与收回
亲爱的小伙伴,如有帮助请订阅专栏!跟着老师每课一练,系统学习Axure交互设计课程! Axure产品经理精品视频课https://edu.csdn.net/course/detail/40420 课程主题:Axure菜单展开与收回 课程视频:...