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

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)方式进行深度分页的原因
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,即不开启模糊查询
    • prefix_length:表示限制输入关键字和ES对应查询field的内容开头的第n个字符必须完全匹配,不允许错别字匹配
      • 如这里等于1,则表示开头的1个字必须匹配,不匹配则不返回
      • 默认值也是0
      • 加大prefix_length的值可以提高效率和准确率
  • 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&#xff0c;并在gpu对图像进行处理然后传回cpu。 首先创建一个后处理基类BasePP 首先声明需要用到的属性。 using System.Collections; using System.Collections.Generic; using …...

初始QT!

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

全国大学生数据建模比赛——深度学习

全国大学生数学建模比赛中&#xff0c;深度学习可以成为解决复杂问题的有力手段。 一、深度学习的优势在比赛中的体现 强大的模式识别能力&#xff1a;深度学习模型&#xff0c;如卷积神经网络&#xff08;CNN&#xff09;和循环神经网络&#xff08;RNN&#xff09;&#xff0…...

Qt技巧(二)-滑动界面,轮询控件,循环操作控件

在Qt界面开发过程中&#xff0c;我们常常要对同类部件&#xff0c;具有同样功能的一系列部件进行操作&#xff0c;比如&#xff1a; 这个页面该怎么设计&#xff0c;中间的几个选项该怎么操作&#xff1f; 我们在主工程中添加一个设计师界面类&#xff0c;类名设置为“BrandF…...

003——单链表

1.链式存储的特点 逻辑&#xff08;通过指针实现&#xff09;上相邻&#xff0c;物理上可相邻可不相邻 2.结点&#xff08;节点都可以&#xff09; 4&#xff08;&8&#xff09; 8&#xff08;&6&#xff09; 6&#xff08;&1&#xff09; 1&#xff08;&…...

XILINX平台下LINUX DMA驱动调研

专栏目录 高质量文章导航-持续更新中-CSDN博客 基础概念 VA:virtual address称为虚拟地址, PA:physical address称为物理地址。 CPU通过地址来访问内存中的单元,如果CPU没有MMU,或者有MMU但没有启动,那么CPU内核在取指令或者访问内存时发出的地址(此时必须是物理地址…...

Oracle数据库安装和配置指南

Oracle数据库是一款功能强大的企业级关系数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;广泛应用于各种规模的企业和组织。其强大的性能和丰富的功能使其成为数据库管理的首选解决方案之一。以下是关于如何安装和配置 Oracle 数据库的详细指南。 一、准备工作 在开…...

制造业中工艺路线(工序)与产线(工作中心)关系

一.工艺路线与生产线是数字孪生中的虚实关系&#xff1a; 1.工艺路线为虚&#xff0c;生产线体为实&#xff1b; 2.工艺路线指导生产线的生产组织&#xff0c;生产线承载工艺路线的能力&#xff0c;把虚拟的生产信息流变成真实的产流。 二.工艺路线与生产线是数字孪生中互为“…...

目标跟踪算法——ByteTrack算法原理解析

文章目录 ByteTrack1. ByteTrack算法步骤&#xff1a;2. 算法解释2.1 模型初始化2.2 模型更新算法流程2.2.1 检测结果划分&#xff0c;划分为高分和较低分段2.2.2 高分段处理手段2.2.3 最优匹配与未匹配划分2.2.4 低分框再匹配2.2.5 未确认轨迹处理2.2.6 更新状态 2.3 匈牙利匹…...

C语言编译的过程

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

前端面试题——栈与队列、动态路由、链表

栈、队列与链表 Java数据结构栏目总结-CSDN博客 栈&#xff08;Stack&#xff09; 栈是一种后进先出&#xff08;LIFO, Last In First Out&#xff09;的数据结构。它只允许在栈顶进行添加&#xff08;push&#xff09;或删除&#xff08;pop&#xff09;元素的操作。 基本操…...

Java算法之计数排序(Counting Sort)

简介 计数排序是一种线性时间复杂度的排序算法&#xff0c;它不依赖于元素之间的比较&#xff0c;而是通过统计数组中每个元素出现的次数&#xff0c;然后根据这些统计信息对元素进行排序。这种算法特别适用于整数且整数的范围不是非常大时。 算法步骤 找出数组中的最大值。…...

【系统架构设计师-2012年】综合知识-答案及详解

更多内容请见&#xff1a; 备考系统架构设计师-核心总结索引 文章目录 【第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包管理工具&#xff0c;和npm的用法基本一样 学习总结 1. 多看看webpack官网 2. webpack的作用&#xff1a;配置一堆东西&#xff0c;达到运行程序的目的 3. 无论什么东西都转成js&#xff0c;…...

Python爬虫所需的技术及其原理(简单易懂)

导言 随着互联网的发展&#xff0c;大量的数据被存储在网络上&#xff0c;而我们需要从中获取有用的信息。Python作为一种功能强大且易于学习的编程语言&#xff0c;被广泛用于网络爬虫的开发。本文将详细介绍Python爬虫所需的技术及其原理&#xff0c;并提供相关的代码案例。…...

FxFactory 8 for Mac 视觉特效插件包安装

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

将语义分割的标签转换为实例分割(yolo)的标签

语义分割的标签&#xff08;目标处为255&#xff0c;其余处为0&#xff09; 实例分割的标签&#xff08;yolo.txt&#xff09;,描述边界的多边形顶点的归一化位置 绘制在原图类似蓝色的边框所示。 废话不多说&#xff0c;直接贴代码&#xff1b; import os import cv2 imp…...

QT 遍历ini配置文件

在 Qt 中&#xff0c;处理 INI 配置文件是一项常见任务&#xff0c;通常使用 QSettings 类来读取和写入这些文件。QSettings 提供了一种方便的方式来操作 INI 文件中的配置数据。下面是如何使用 QSettings 遍历和处理 INI 配置文件的示例。 示例代码 假设有一个名为 config.i…...

ecmascript和javascript的区别详细讲解

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

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...

树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频

使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...

React Native 导航系统实战(React Navigation)

导航系统实战&#xff08;React Navigation&#xff09; React Navigation 是 React Native 应用中最常用的导航库之一&#xff0c;它提供了多种导航模式&#xff0c;如堆栈导航&#xff08;Stack Navigator&#xff09;、标签导航&#xff08;Tab Navigator&#xff09;和抽屉…...

五年级数学知识边界总结思考-下册

目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解&#xff1a;由来、作用与意义**一、知识点核心内容****二、知识点的由来&#xff1a;从生活实践到数学抽象****三、知识的作用&#xff1a;解决实际问题的工具****四、学习的意义&#xff1a;培养核心素养…...

【论文阅读28】-CNN-BiLSTM-Attention-(2024)

本文把滑坡位移序列拆开、筛优质因子&#xff0c;再用 CNN-BiLSTM-Attention 来动态预测每个子序列&#xff0c;最后重构出总位移&#xff0c;预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵&#xff08;S…...

3-11单元格区域边界定位(End属性)学习笔记

返回一个Range 对象&#xff0c;只读。该对象代表包含源区域的区域上端下端左端右端的最后一个单元格。等同于按键 End 向上键(End(xlUp))、End向下键(End(xlDown))、End向左键(End(xlToLeft)End向右键(End(xlToRight)) 注意&#xff1a;它移动的位置必须是相连的有内容的单元格…...

python执行测试用例,allure报乱码且未成功生成报告

allure执行测试用例时显示乱码&#xff1a;‘allure’ &#xfffd;&#xfffd;&#xfffd;&#xfffd;&#xfffd;ڲ&#xfffd;&#xfffd;&#xfffd;&#xfffd;ⲿ&#xfffd;&#xfffd;&#xfffd;Ҳ&#xfffd;&#xfffd;&#xfffd;ǿ&#xfffd;&am…...

使用 SymPy 进行向量和矩阵的高级操作

在科学计算和工程领域&#xff0c;向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能&#xff0c;能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作&#xff0c;并通过具体…...

在QWebEngineView上实现鼠标、触摸等事件捕获的解决方案

这个问题我看其他博主也写了&#xff0c;要么要会员、要么写的乱七八糟。这里我整理一下&#xff0c;把问题说清楚并且给出代码&#xff0c;拿去用就行&#xff0c;照着葫芦画瓢。 问题 在继承QWebEngineView后&#xff0c;重写mousePressEvent或event函数无法捕获鼠标按下事…...

A2A JS SDK 完整教程:快速入门指南

目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库&#xff…...