ES查询语法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ES查询语法相关的知识,希望对你有一定的参考价值。

参考技术A 参数拼接到查询路劲中查询,查询可以不指定 type 的类型

查询结果部分字段说明:

value值部分会作为整体被查询, 不会被分词, 与match做区分, match的value是会被分词作匹配查询的.

返回的文档必须满足must子句的条件,并且参与计算分值

返回的文档必须满足filter子句的条件。但是不会像Must一样,参与计算分值

返回的文档可能满足should子句的条件。在一个Bool查询中,如果没有must或者filter,有一个或者多个should子句,那么只要满足一个就可以返回。minimum_should_match参数定义了至少满足几个子句, 默认情况是1

返回的文档必须不满足must_not定义的条件。
如果一个查询既有filter又有should,那么至少包含一个should子句。
bool查询也支持禁用协同计分选项disable_coord。一般计算分值的因素取决于所有的查询条件。
bool查询也是采用more_matches_is_better的机制,因此满足must和should子句的文档将会合并起来计算分值。

使用 _source 可以只查询需要展示的列, 相当于 sql 的 select offset,methodName from ...

from表示从第几行开始,size表示查询多少条文档。from默认为0,size默认为10,


聚合查询的结构:

举例说明:

比如求所有文档某个字段求最大、最小、和、平均值, 可以对某个field进行计算.

以avg为例, 计算offset在所有文档中的均值

运行结果:

该聚合一般域其它 single-value 聚合联合使用,比如在计算一个字段的平均值的时候,可能还会关注这个平均值是由多少个值计算而来。

例子:统计搜索结果中maiDianType字段出现的次数

搜索结果:

基于文档的某个值(可以是特定的字段,也可以通过脚本计算而来),计算文档非重复的个数(去重计数),相当于sql中的distinct。

例子: 统计搜索结果中maiDianType出现的种类

搜索结果: maiDianType共有6种值

基于文档的某个值(可以是特定的数值型字段,也可以通过脚本计算而来),计算出一些统计信息(min、max、sum、count、avg5个值)。

例子: 基于useTime进行值统计
ps: 这个例子中是基于脚本进行的统计

统计结果:

与stats功能相似, 比stats多4个统计结果: 平方和、方差、标准差、平均值加/减两个标准差的区间
例子:

结果:

对指定字段(脚本)的值按从小到大累计每个值对应的文档数的占比(占所有命中文档数的百分比),返回指定占比比例对应的值。默认返回[ 1, 5, 25, 50, 75, 95, 99 ]分位上的值,也可以指定分位置.

例子:

结果:

ps:
"1.0":30 代表: useTime<30的, 占比1%
"99.0":237 代表: useTime<237的, 占比99%

例子: 指定聚合的百分比

查询结果:

词聚合。基于某个field,该 field 内的每一个【唯一词元】为一个桶,每个桶内可以做再次聚合.

列子: 以prodSubNo的每个值作为聚合, 聚合结果默认排序为从大到小

搜索结果:

doc_count_error_upper_bound: //文档计数的最大偏差值
sum_other_doc_count: , //未返回的其他项的文档数

列子: 以prodSubNo的每个值作为聚合, 得到的桶继续做avg子聚合, 得到每个prodSubNo下的useTime的avg聚合结果

搜索结果:

基于一个条件,来对当前的文档进行过滤的聚合。

例子: 对查询结果进行过滤, prodSubNo=601001聚合过滤, 可对过滤后的内容进行子聚合查询, 这里使用stats统计聚合

查询结果:

基于多个过滤条件,来对当前文档进行【过滤】的聚合,每个过滤都包含所有满足它的文档(多个bucket中可能重复),先过滤再聚合。

例子: 使用prodSubNo=601001和maiDianType=script分别对索引结果进行过滤

搜索结果:

范围分组聚合。基于某个值(可以是 field 或 script),以【字段范围】来桶分聚合。范围聚合包括 from 值,不包括 to 值(区间前闭后开)。

例子: 对于useTime字段值进行0-20和20-40范围内的聚合
ps: 对范围聚合后的结果,还可以进行子聚合

搜索结果:

以上是关于ES查询语法的主要内容,如果未能解决你的问题,请参考以下文章

es的语法操作命令

ES查询语法解析

es常用查询语法 #yyds干货盘点#

Es学习第七课, termtermsmatch等基本查询语法

Kibana 查询语法 --- 2022-04-03

ES(elasticsearch) query DSL 查询语法