Query DSL
这是一个基于 JSON 定义的查询语言,主要包含两种类型:
字段查询:如 term、match、range等,只针对某一字段进行查询
复合查询:如bool查询等,包含一个或多个字段类查询或复合查询语句
Query DSL- 字段类查询
字段类查询主要包含下面的两类:
match query
。这个语句就表示返回包含alfred或way的文档。
match query的流程
match query参数
在前面的查询中待查询语句满足其中的一个即可,es提供了一个参数用来表示查询语句匹配关系:
---这个例子中就表示必须同时包含alfred和way
相关性算分
在match query流程中,汇总的分的过程是es根据内部的相关性算分算法(TF/IDF、BM25等)进行计算的。在es5.x版本后默认使用BM25算法进行相关性算分。
相关性算分是指文档与查询语句之间的相关度(relevance)。其本质是一个排序问题,就是当通过倒排索引获取到匹配的文档列表后,如何将最符合用户需求的文档排在前列。
相关性算分具有如下的重要概念:
BM25算法中BM指的是BEST MATCH,25指的是迭代了25次才计算方法,是针对TF/IDF的一种优化,计算公式如下:
match phrase query
对字段有检索,有顺序要求,API如下:
----这个例子是:匹配java和engineer关键字的文档,且java要在engineer前面。
match phrase query参数
通过slop参数控制单词间的间隔:
这样额话,就表示允许匹配的文档可以与 java engineer有一个距离的差异。这样,java senior engineer这样的字段就可以返回了。
query string query
类似于 URI search中的q参数查询:
这个例子就表示返回返回username字段中包含alfred和way的文档
这个表示查询username 和 job字段,条件是包含alfred或同时包含java和ruby
simple query string query
类似于query string,但是会忽略掉错误的查询语法,并且仅支持部分的查询语法。不能使用 AND,OR,NOT等关键词,使用 +代替AND, | 代替OR,- 代替 NOT。
Term query
将查询语句作为一个整体进行查询,不进行分词:
Terms query
一次传入多个单词进行查询:
range query
范围查询主要针对日期和数值类型:
Date Math是针对日期的一种更友好的计算格式:
主要的时间单位有:y(year)、M(months)、w(week)、d(days)、h(hours)、m(minutes)、s(seconds)
复合查询
复合查询是指包含字段类查询或复合查询的类型,主要有以下几种:
- constant_score query
- bool query
- dis_max query
- function_score query
- boosting query
constant_score query将其内部的查询结果文档得分都设定为1或者boost的值,多用于结合bool查询实现自定义得分
:
在返回的结果中,_score的值全部为1
bool query由一个或多个bool子句组成,主要包含以下4个:
filter查询只返回符合条件的文档而不关心相关性,不进行相关性算分。es对filter有智能缓存,所以其执行效率很高。所以在执行简单查询而不考虑相关性的时候推荐使用filter代替query等。
执行结果中的_score的值为0,表示没有进行相关性算分
must指定了必须符合的条件:
must_not是指排除must_not中符合条件的文档:
should的使用有两种情况:
- bool查询中只包含should,不包含must查询
- bool查询中同时包含should和must查询
query context 和filter context的区别
count api
这个api是用于返回符合条件的文档数,endpoint为_count
source filtering
过滤返回结果中_source的字段,节省网络开销:
本文来自博客园,作者:孙龙-程序员,转载请注明原文链接:https://www.cnblogs.com/sunlong88/p/12833275.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· DeepSeek在M芯片Mac上本地化部署
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能
2018-05-05 Event IO Process
2018-05-05 task timer
2018-05-05 websocket_server task
2018-05-05 tcp客户端
2018-05-05 http_server
2018-05-05 tcp服务器
2018-05-05 swoole安装