【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"]}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/710119.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机网络:数据链路层知识点汇总

文章目录 一、数据链路层功能概述二、封装成帧和透明传输三、差错控制(检错编码)四、差错控制(纠错编码)五、流量控制与可靠传输机制六、停止-等待协议七、后退N帧协议(GBN)八、选择重传协议(SR…

2024年华为OD机试真题-运输时间-Python-OD统一考试(C卷)

题目描述&#xff1a; M&#xff08;1<M <20&#xff09;辆车需要在一条不能超车的单行道到达终点&#xff0c;起点到终点的距离为N&#xff08;1<N<400&#xff09;。速度快的车追上前车后&#xff0c;只能以前车的速度继续行驶&#xff0c;求最后一车辆到达目的地…

用户增长6步法

什么是用户增长&#xff1f; 通过痛点、产品、渠道、内容、技术、数据等要素实现用户的获取、激活、留存、变现、推荐&#xff0c;用户增长包含了产品出现前的用户增长、产品生产周期内的用户增长、产品生命周期外的用户增长三个阶段。 用户增长6步法&#xff1a;方法、模型和…

【2024年】江苏省彭城监狱监狱食堂生活物资蔬菜类采购项目竞争磋商公告

【2024年】江苏省彭城监狱监狱食堂生活物资蔬菜类采购项目竞争磋商公告 &#xff08;招标编号&#xff1a;PC-JY-2024-004&#xff09; 项目所在地区&#xff1a;江苏省徐州市 一、招标条件 本监狱食堂生活物资蔬菜类采购已由项目审批/核准/备案机关批准&#xff0c;项目资金来…

YOLOv8-TensorRT on Jetson

YOLOv8-TensorRT Jetson 项目地址&#xff1a;https://github.com/triple-Mu/YOLOv8-TensorRT/blob/main/docs/Jetson.md 文档地址&#xff1a;https://github.com/triple-Mu/YOLOv8-TensorRT/blob/main/docs/Jetson.md 注意 engine 文件不跨平台&#xff0c;只能在对应的平台…

docker mysql主从复制

新建主服务器容器实例3301 mysql 主 3301 docker run -p 3301:3306 --name mysql-master \ -v /mydata/mysql-master/log:/var/log/mysql \ -v /mydata/mysql-master/data:/var/lib/mysql \ -v /mydata/mysql-master/conf:/etc/mysql \ -v /home/mysql/mysql-files:/var/lib/…

MATLAB环境下使用相关图可视化相关矩阵

为了处理各行各业中出现的高维数据&#xff0c;迫切需要寻找适用的统计学方法。大维随机矩阵理论是处理高维数据的理论工具之一&#xff0c;在高维统计分析中&#xff0c;表现出良好的性能并有着广泛的应用。 二十世纪四十年代和五十年代初期&#xff0c;大维随机矩阵理论起源…

AI大模型 拍照搜题

最近&#xff0c;发现一款小程序【问智通】&#xff0c;实现了拍照搜题结合AI大模型&#xff0c;省去了打字和敲数学公式向AI提问&#xff0c;完美的补充了其它拍照搜题平台拍不到&#xff0c;没解析等不足&#xff01;&#xff01;&#xff01; 小程序码&#xff1a; APP下载…

【多模态】28、LLaVA 第一版 | Visual Instruction Tuning 多模态模型的指令微调

论文&#xff1a;Visual Instruction Tuning 代码&#xff1a;https://llava-vl.github.io/ 出处&#xff1a;NeurIPS 2023 Oral 系列工作&#xff1a;LLaVA-1.5、LLaVA-PLUS、LLaVA-Interactive、Video-LLaVA、LLaVA-Med 等&#xff0c;LLaVA 也是首次将指令学习引入多模态…

西门子WinCC冗余项目使用

1 如果需要使用WinCC冗余系统时&#xff0c;请仔细阅读下面的文档&#xff0c;它将解决以下几个问题&#xff1a; &#xff08;1&#xff09;WinCC冗余有什么样的功能&#xff1f; &#xff08;2&#xff09;需要购买什么样的授权&#xff1f; &#xff08;3&#xff09;应…

TypeScript 中命名空间与模块的区别

&#x1f469; 个人主页&#xff1a;不爱吃糖的程序媛 &#x1f64b;‍♂️ 作者简介&#xff1a;前端领域新星创作者、CSDN内容合伙人&#xff0c;专注于前端各领域技术&#xff0c;成长的路上共同学习共同进步&#xff0c;一起加油呀&#xff01; ✨系列专栏&#xff1a;前端…

H3C OSPF 外部路由引入实验

H3C OSPF 外部路由引入实验 实验拓扑 实验需求 按照图示配置 IP 地址R1&#xff0c;R2&#xff0c;R3 运行 OSPF 使内网互通&#xff0c;所有接口&#xff08;公网接口除外&#xff09;全部宣告进 Area 0&#xff1b;要求使用环回口作为 Router-id业务网段不允许出现协议报文…

PL/SQL语法--PL/SQL和SQL的异同

目录 引言一、核心概念1、SQL释义&#xff1a;2、PL/SQL释义&#xff1a; 二、功能特点以及实际应用场景1、异同点2、实际应用场景举例&#xff1a; 三、性能与效率对比四、总结五、其他 引言 在Oracle数据库开发与管理中&#xff0c;SQL与PL/SQL作为两种不可或缺的语言工具&am…

请立刻停止编写 Dockerfiles 并使用 docker init

您是那种觉得编写 Dockerfile 和 docker-compose.yml 文件很痛苦的人之一吗&#xff1f; 我承认&#xff0c;我就是其中之一。 我总是想知道我是否遵循了 Dockerfile、 docker-compose 文件的最佳编写实践&#xff0c;我害怕在不知不觉中引入了安全漏洞。 但是现在&#xff0c…

【数据结构和算法初阶(C语言)】时间复杂度(衡量算法快慢的高端玩家,搭配例题详细剖析)

目录 1.算法效率 1.1如何衡量一个算法的好坏 1.2 算法的复杂度 2.主菜-时间复杂度 2.1 时间复杂度的概念 2.2 大O的渐进表示法 2.2.1算法的最好&#xff0c;最坏和平均的情况 3.经典时间复杂度计算举例 3.1计算冒泡排序的时间复杂度 3.2计算折半查找的时间复杂度 3.…

Vue3 学习笔记(Day5)

「写在前面」 本文为尚硅谷禹神 Vue3 教程的学习笔记。本着自己学习、分享他人的态度&#xff0c;分享学习笔记&#xff0c;希望能对大家有所帮助。推荐先按顺序阅读往期内容&#xff1a; 1. Vue3 学习笔记&#xff08;Day1&#xff09; 2. Vue3 学习笔记&#xff08;Day2&…

《Docker Compose深度解析:多环境配置、服务扩展与发现》

《Docker Compose深度解析&#xff1a;多环境配置、服务扩展与发现》 1. 引言 Docker Compose 是 Docker 官方提供的用于定义和运行多容器 Docker 应用程序的工具。在上一篇中&#xff0c;我们已经介绍了 Docker Compose 的基本概念和用法。本篇将进一步深入&#xff0c;探讨…

提升培训考试效率的系统设计策略

随着培训的重要性日益凸显&#xff0c;如何提升培训考试系统的效率成为了许多组织和机构关注的焦点。 一、设计自适应的考试界面 培训考试系统的界面应该能够自适应不同的屏幕尺寸和设备类型&#xff0c;如电脑、平板电脑和手机。采用响应式设计技术&#xff0c;确保考生在不同…

Leetcode115. 不同的子序列 -代码随想录

题目&#xff1a; 代码(首刷看解析 2024年2月29日&#xff09;&#xff1a; 不晓得这种超过int和long的测试案例是用来恶心谁的&#xff0c;用DP都没机会取模 class Solution { public:// 动态规划const int MOD 1000000007;int numDistinct(string s, string t) {long n s.…

折线图sns.lineplot()

折线图sns.lineplot 介绍代码介绍 season官网 sns.lineplot() 是 Seaborn 库中用于绘制折线图的函数。这个函数可以可视化数据集中不同变量之间的关系,特别适合展示随时间变化的数据趋势。 下面是 sns.lineplot() 函数的一般用法和一些常用参数: sns.lineplot(x=‘x轴数据…