【Elasticsearch查询】精确查询
文章目录
- 复合查询
- constant_score query
- bool query
- dis_max query
- function_score query
- boosting query
- 单层嵌套
- 双层嵌套
- 词项查询
- term query(词项查询)
- 数字的精确查询
- 文本的精确查询
- 查询优化
- terms query(多词项查询)
- terms_set query
- range query (范围查询)
- exists query (存在查询)
- null_value
- prefix query (前缀查询)
- wildcard query (通配符查询)
- regexp query (正则查询)
- fuzzy query (模糊查询)
- type query (类型查询)
- ids query(ID查询)
复合查询
复合查询封装了其他复合查询或子查询,可以组合它们的结果和分数,改变它们的行为,或者从查询切换到过滤上下文。
constant_score query
包装另一个查询,但在筛选器上下文中执行它的查询。给所有匹配的文档相同的“常量”_score。
GET /_search
{"query": {"constant_score" : {"filter" : {"term" : { "user" : "kimchy"}},"boost" : 1.2}}
}
bool query
用于组合多个子查询或复合查询子句的默认查询,如must、should、must_not或filter子句。must和should子句的分数组合在一起——匹配的子句越多越好——而must_not和filter子句则在过滤器上下文中执行。
POST _search
{"query": {"bool" : {"must" : {"term" : { "user" : "kimchy" }},"filter": {"term" : { "tag" : "tech" }},"must_not" : {"range" : {"age" : { "gte" : 10, "lte" : 20 }}},"should" : [{ "term" : { "tag" : "wow" } },{ "term" : { "tag" : "elasticsearch" } }],"minimum_should_match" : 1,"boost" : 1.0}}
}
dis_max query
接受多个查询并返回与任何查询子句匹配的任何文档的查询。bool查询组合来自所有匹配查询的分数,而dis_max查询使用单个最佳匹配查询子句的分数。
GET /_search
{"query": {"dis_max" : {"tie_breaker" : 0.7,"boost" : 1.2,"queries" : [{"term" : { "age" : 34 }},{"term" : { "age" : 35 }}]}}
}
function_score query
使用函数修改主查询返回的分数,以考虑流行度、近似性、距离或脚本实现的自定义算法等因素。
要使用function_score,用户必须定义一个查询和一个或多个函数,这些函数为查询返回的每个文档计算一个新分数。
GET /_search
{"query": {"function_score": {"query": { "match_all": {} },"boost": "5","random_score": {}, "boost_mode":"multiply"}}
}
boosting query
返回与正查询匹配的文档,但减少与负查询匹配的文档的分数。
boosting查询可用于有效地降级与给定查询匹配的结果。与bool查询中的“NOT”子句不同,它仍然选择包含不需要的词语的文档,但会降低它们的总体得分。
GET /_search
{"query": {"boosting" : {"positive" : {"term" : {"field1" : "value1"}},"negative" : {"term" : {"field2" : "value2"}},"negative_boost" : 0.2}}
}
单层嵌套
组成部分
{"bool" : {"must" : [],"should" : [],"must_not" : [],}
}
must : 所有的语句都 必须(must) 匹配,与 AND 等价。
must_not : 所有的语句都 不能(must not) 匹配,与 NOT 等价。
should : 至少有一个语句要匹配,与 OR 等价。
GET /my_store/_doc/_search
{"query": {"bool": {"should": [{"term": {"price": 20}},{"term": {"productID": "XHDK-A-1293-#fJ3"}}],"must_not": {"term": {"price": 30}}}}
}
双层嵌套
GET /my_store/_doc/_search
{"query": {"bool": {"should": [{"term": {"productID": "KDKE-B-9947-#kL5"}},{"bool": {"must": [{"term": {"productID": "JODL-X-1937-#pV7"}},{"term": {"price": 30}}]}}]}}
}
词项查询
全文查询将在执行之前对查询字符串进行分词,而词项级查询将对存储在反向索引中的精确词项进行操作,并且执行前对只对具有normalizer属性的keyword字段词项进行规范化。
这些查询通常用于数字、日期和枚举等结构化数据,而不是全文字段。或者,它们允许您在分析过程之前创建低级查询。
term query(词项查询)
查找包含在指定字段中确切指定的词项的文档。
词项查询查找包含倒排索引中指定的精确词项的文档。例如:
POST _search
{"query": {"term" : { "user" : "Kimchy" } }
}
在用户字段的倒排索引中查找包含确切的术语Kimchy的文档。
权重:boost
Why doesn’t the term query match my document?
字符串字段可以是text类型(作为全文处理,如电子邮件的正文)或keyword类型(作为精确值处理,如电子邮件地址或邮政编码)。精确值(如数字、日期和关键字)将字段中指定的精确值添加到反向索引中,以使它们可搜索。
但是,对text 字段进行分析。这意味着它们的值首先通过分析器生成一个词项列表,然后将其添加到反向索引中。
分析文本有很多方法:默认的standard analyzer会去掉大多数标点符号,将文本分解为单个单词,并将它们小写。例如,standard的分析器会将字符串“Quick Brown Fox!”分词为[quick, brown, fox].。
这个分析过程使得在一个大块段落中搜索单个单词成为可能。
词项查询在字段的倒索引中查找确切的词项—它不知道关于字段的分析器的任何信息。这使得它在keyword 字段、数字或日期字段中查找值非常有用。在查询全文文本字段时,使用match查询,它理解如何分析字段。
为了演示,请尝试下面的示例。首先,创建一个索引,指定字段映射,索引一个文档:
PUT my_index
{"mappings": {"_doc": {"properties": {"full_text": {"type": "text" },"exact_value": {"type": "keyword" }}}}
}PUT my_index/_doc/1
{"full_text": "Quick Foxes!", "exact_value": "Quick Foxes!"
}
现在,比较term查询和match查询的结果:
GET my_index/_search
{"query": {"term": {"exact_value": "Quick Foxes!" }}
}GET my_index/_search
{"query": {"term": {"full_text": "Quick Foxes!" }}
}GET my_index/_search
{"query": {"term": {"full_text": "foxes" }}
}GET my_index/_search
{"query": {"match": {"full_text": "Quick Foxes!" }}
}
数字的精确查询
非评分模式查询数字
GET /my_store/products/_search
{"query" : {"constant_score" : { "filter" : {"term" : { "price" : 20}}}}
}
文本的精确查询
1、text字段可设置为无需分析的
"properties" : {"productID" : {"type" : "string","index" : "not_analyzed" }}
2、直接设置为KeyWord类型,可通过非评分模式和布尔查询实现精确匹配
查询优化
理论上非评分查询 先于 评分查询执行。非评分查询任务旨在降低那些将对评分查询计算带来更高成本的文档数量,从而达到快速搜索的目的。
terms query(多词项查询)
查找包含指定字段中指定的任何确切词项的文档。
筛选具有与所提供的任何词项(未分析)匹配的字段的文档。例如:
GET /_search
{"query": {"terms" : { "user" : ["kimchy", "elasticsearch"]}}
}
terms_set query
返回与至少一个或多个提供的词项匹配的任何文档。这些词项没有被分析,因此必须精确匹配。必须匹配的词的数量在每个文档中都是不同的,或者由最小应匹配字段控制,或者在每个文档中计算最小应匹配脚本。
控制必须匹配的必需词汇的数量的字段必须是一个数字字段:
PUT /my-index
{"mappings": {"_doc": {"properties": {"required_matches": {"type": "long"}}}}
}PUT /my-index/_doc/1?refresh
{"codes": ["ghi", "jkl"],"required_matches": 2
}PUT /my-index/_doc/2?refresh
{"codes": ["def", "ghi"],"required_matches": 2
}GET /my-index/_search
{"query": {"terms_set": {"codes" : {"terms" : ["abc", "def", "ghi"],"minimum_should_match_field": "required_matches"}}}
}
range query (范围查询)
查找指定字段中包含指定范围内的值(日期、数字或字符串)的文档。
GET _search
{"query": {"range" : {"age" : {"gte" : 10,"lte" : 20,"boost" : 2.0}}}
}
符号:
gt gte lt lte
查询过去一个小时内的所有文档
"range" : {"timestamp" : {"gt" : "now-1h"}
}
某一段时间
"range" : {"timestamp" : {"gt" : "2020-01-01 00:00:00","lt" : "2020-01-01 00:00:00||+1M" }
}
exists query (存在查询)
返回原始字段中至少有一个非空值的文档:
GET /_search
{"query": {"exists" : { "field" : "user" }}
}
不会被匹配到的情况:
{ "user": null }
{ "user": [] }
{ "user": [null] }
{ "foo": "bar" }
null_value
如果字段映射包含null_value设置,则显式的空值将被指定的null_value替换。例如,如果用户字段映射如下:
PUT /example
{"mappings": {"_doc": {"properties": {"user": {"type": "keyword","null_value": "_null_"}}}}
}
然后显式的空值将被索引为字符串null,当搜寻非空文档时,null值依然可以被搜索到
{ "user": null }
{ "user": [null] }
返回字段为空的文档:
GET /_search
{"query": {"bool": {"must_not": {"exists": {"field": "user"}}}}
}
prefix query (前缀查询)
查找指定字段中包含以指定的确切前缀开头的词项的文档。
GET /_search
{ "query": {"prefix" : { "user" : "ki" }}
}
权重:boost
wildcard query (通配符查询)
查找指定字段中包含与指定模式匹配的词项的文档,其中模式支持单字符通配符(?)和多字符通配符(*)
GET /_search
{"query": {"wildcard" : { "user" : "ki*y" }}
}
regexp query (正则查询)
查找指定字段中包含与指定的正则表达式匹配的词项的文档。
注意:regexp查询的性能在很大程度上取决于所选的正则表达式。与使用lookaround正则表达式一样,匹配像.*这样的所有内容会非常慢。如果可能,您应该尝试在正则表达式开始之前使用一个长前缀。像.*?+会大大降低性能。
GET /_search
{"query": {"regexp":{"name.first": "s.*y"}}
}
fuzzy query (模糊查询)
查找指定字段中包含与指定词项有模糊相似之词项的文档。模糊查询使用基于Levenshtein编辑距离的相似性。
模糊查询生成在模糊性中指定的最大编辑距离内的匹配词项,然后检查词项字典,以找出这些生成的词项中哪些确实存在于索引中。最后一个查询使用最多max_expansions匹配的词项。
GET /_search
{"query": {"fuzzy" : { "user" : "ki" }}
}
高级查询:
GET /_search
{"query": {"fuzzy" : {"user" : {"value": "ki","boost": 1.0,"fuzziness": 2,"prefix_length": 0,"max_expansions": 100}}}
}
type query (类型查询)
筛选与所提供的文档/映射类型匹配的文档。
GET /_search
{"query": {"type" : {"value" : "_doc"}}
}
ids query(ID查询)
查找具有指定类型和id的文档。
GET /_search
{"query": {"ids" : {"type" : "_doc","values" : ["1", "4", "100"]}}
}
相关文章:
【Elasticsearch查询】精确查询
文章目录 复合查询constant_score querybool querydis_max queryfunction_score queryboosting query单层嵌套双层嵌套 词项查询term query(词项查询)数字的精确查询文本的精确查询查询优化 terms query(多词项查询)terms_set que…...
小狐狸chat2.7.2免授权修复版可用版
小狐狸chat2.7.2免授权修复版可用版 在网络上面找了好几个版本不能使用,今天发布这个仔细测试正常使用 主要功能:独立版无限多开支持分销会员充值自己APP打包小程序万能创作MJ绘图多个国内接口 国外很火的ChatGPT,这是一种基于人工智能技术…...
通过QScrollArea寻找最后一个弹簧并且设置弹簧大小
项目原因,最近需要通过QScrollArea寻找其中最后一个弹簧并且设置大小和策略,因为无法直接调用UI指针,所以只能用代码寻找。 直接上代码: if (m_scrollArea){int iScrollWidth m_labelSelectedTitle->width();m_scrollArea-&g…...
為什麼使用海外動態代理IP進行網路爬蟲?
網路爬蟲作為獲取網路數據的重要工具,其重要性不言而喻。但隨著網站反爬策略的日益嚴格,爬蟲任務變得愈發困難,不過海外動態代理IP可以很好地解決這一問題。本文將詳細闡釋動態代理IP在爬蟲中的應用,以及如何使用動態代理IP提升爬…...
LeetCode 热题100 刷题笔记
一:哈希表 一般哈希表都是用来快速判断一个元素是否出现集合里。 直白来讲其实数组就是一张哈希表,哈希表中关键码就是数组的索引下标,然后通过下标直接访问数组中的元素。 1.两数之和 题目链接:. - 力扣(LeetCode…...
veridata安装
GoldenGate Veridata是GoldenGate中用于比较数据库间数据同步效果的一个对比软件。Veridata基于Web,支持大据量的数据对比,能够在不停止数据同步的情况下就可以比较数据。 1、安装veridata前我们都会先安装 middleware infrastructure 这时我们会添加几个…...
面试笔记系列三之spring基础知识点整理及常见面试题
目录 如何实现一个IOC容器? 说说你对Spring 的理解? 你觉得Spring的核心是什么? 说一下使用spring的优势? Spring是如何简化开发的? IOC 运行时序 prepareRefresh() 初始化上下文环境 obtainFreshBeanFactory() 创建并…...
面试笔记系列四之SpringBoot+SpringCloud+计算机网络基础知识点整理及常见面试题
目录 Spring Boot 什么是 Spring Boot? Spring Boot 有哪些优点? SpringBootApplication注解 Spring Boot 的启动流程 Spring Boot属性加载顺序 springboot自动配置原理是什么?(*) 如何理解springboot中的start…...
Kernel[Device Tree] - 1. 设备树的由来
内核代码中,arch文件夹下,是各个架构相关的代码,arm也在里面。 arm子文件夹下,有mach-xxx的目录,就是针对各个芯片类型的,比如mach-imx就是imx系列的芯片。 再里面就是具体的芯片或SOC,比如ma…...
第十四天-网络爬虫基础
目录 1.什么是爬虫 2.网络协议 OSI七层参考模型 TCP/IP模型 1.应用层 2.传输层 3.网络层 3.HTTP协议 1.介绍 2.http版本: 3.请求格式 4.请求方法 5.HTTP响应 状态码: 6.http如何连接 4.Python requests模块 1.安装 2.使用get/post 3.响…...
Linux系统安装
Linux系统安装 安装包链接 链接:https://pan.baidu.com/s/1FdP7TH90UvKUQuiL2yeGCA 提取码:c49n安装包内容 虚拟机执行文件 详细安装教程 虚拟机密钥 Ubuntu 安装步骤 先点击虚拟机的.EXE文件安装,打开安装教程,有详细的说明。...
springboot-基础-thymeleaf配置+YAML语法
备份笔记。所有代码都是2019年测试通过的,如有问题请自行搜索解决! 目录 配置thymeleafthymeleaf举例参数设置yaml基础知识YAML语法报错:Expecting a Mapping node but got 其他语法 spring boot不推荐使用jsp。thymeleaf是一个XML/XHTML/HTM…...
深入理解分库、分表、分库分表
前言 分库分表,是企业里面比较常见的针对高并发、数据量大的场景下的一种技术优化方案,所谓"分库分表",根本就不是一件事儿,而是三件事儿,他们要解决的问题也都不一样,这三个事儿分别是"只…...
Oracle中序列
1. Sequence 定义 在Oracle中可以用SEQUENCE生成自增字段。Sequence序列是Oracle中用于生成数字序列的对象,可以创建一个唯一的数字作为主键。 2. 为什么要用 Sequence 你可能有疑问为什么要使用序列? 不能使用一个存储主键的表并每次递增吗…...
蓝牙耳机和笔记本电脑配对连接上了,播放设备里没有显示蓝牙耳机这个设备,选不了输出设备
环境: WIN10 杂牌蓝牙耳机6s 问题描述: 蓝牙耳机和笔记本电脑配对连接上了,播放设备里没有显示蓝牙耳机这个设备,选不了输出设备 解决方案: 1.打开设备和打印机,找到这个设备 2.选中这个设备&#…...
Cadence Allegro PCB设计88问解析(三十四) 之 Allegro 中 DDR等长处理
一个学习信号完整性仿真的layout工程师 在进行PCB设计时 ,会遇到一些单端的信号要做等长处理,比如DDR的数据线,交换机之间的数据线之类的。这时需要我们建立match group,来做等长。下面简单介绍在Allegro中怎么做等长:…...
向爬虫而生---Redis 探究篇2<redis集群(1)>
前言: 经常会遇到这样的事,redis运行一段时间以后,就会出现迟钝和卡壳! 这时候,说明已经到了瓶颈期了,需要用到redis集群了! 那么,弄明白集群的几个概念是必要的,我用案例来讲,,, 正文: 当需要处理大量数据或提供高可用性和性能时,Redis集群是一种常见的解决方案。…...
[云原生] 二进制安装K8S(上)搭建单机matser、etcd集群和node节点
一、单机matser预部署设计 目前Kubernetes最新版本是v1.25,但大部分公司一般不会使用最新版本。 目前公司使用比较多的:老版本是v1.15,因为v1.16改变了很多API接口版本,国内目前使用比较多的是v1.18、v1.20。 组件部署ÿ…...
乘积尾零(蓝桥杯)
文章目录 乘积尾零题目描述代码 乘积尾零 题目描述 本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。 如下的 10 行数据,每行有 10 个整数,请你求出它们的乘积的末尾有多少个零? 5650 454…...
项目解决方案: 实时视频拼接方案介绍
目 录 1、实时视频拼接概述 2、适用场景 3、系统介绍 3.1拼接形式 3.1.1横向拼接 3.1.2纵向拼接 3.2前端选择 3.2.1前端类型 3.2.2推荐配置 3.3后端选择 3.3.1录像回放 3.3.2客户端展示 4、拼接方案介绍 4.1基于4K摄像机的拼接方案 4.1.1系统架构…...
【Python】 -- 趣味代码 - 小恐龙游戏
文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...
循环冗余码校验CRC码 算法步骤+详细实例计算
通信过程:(白话解释) 我们将原始待发送的消息称为 M M M,依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)(意思就是 G ( x ) G(x) G(x) 是已知的)࿰…...
Java - Mysql数据类型对应
Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...
ETLCloud可能遇到的问题有哪些?常见坑位解析
数据集成平台ETLCloud,主要用于支持数据的抽取(Extract)、转换(Transform)和加载(Load)过程。提供了一个简洁直观的界面,以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...
令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍
文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结: 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析: 实际业务去理解体会统一注…...
3-11单元格区域边界定位(End属性)学习笔记
返回一个Range 对象,只读。该对象代表包含源区域的区域上端下端左端右端的最后一个单元格。等同于按键 End 向上键(End(xlUp))、End向下键(End(xlDown))、End向左键(End(xlToLeft)End向右键(End(xlToRight)) 注意:它移动的位置必须是相连的有内容的单元格…...
MySQL账号权限管理指南:安全创建账户与精细授权技巧
在MySQL数据库管理中,合理创建用户账号并分配精确权限是保障数据安全的核心环节。直接使用root账号进行所有操作不仅危险且难以审计操作行为。今天我们来全面解析MySQL账号创建与权限分配的专业方法。 一、为何需要创建独立账号? 最小权限原则…...
Python 包管理器 uv 介绍
Python 包管理器 uv 全面介绍 uv 是由 Astral(热门工具 Ruff 的开发者)推出的下一代高性能 Python 包管理器和构建工具,用 Rust 编写。它旨在解决传统工具(如 pip、virtualenv、pip-tools)的性能瓶颈,同时…...
回溯算法学习
一、电话号码的字母组合 import java.util.ArrayList; import java.util.List;import javax.management.loading.PrivateClassLoader;public class letterCombinations {private static final String[] KEYPAD {"", //0"", //1"abc", //2"…...
接口自动化测试:HttpRunner基础
相关文档 HttpRunner V3.x中文文档 HttpRunner 用户指南 使用HttpRunner 3.x实现接口自动化测试 HttpRunner介绍 HttpRunner 是一个开源的 API 测试工具,支持 HTTP(S)/HTTP2/WebSocket/RPC 等网络协议,涵盖接口测试、性能测试、数字体验监测等测试类型…...
