四、查询的进阶使用
4.1、分页查询
我们可以使用from和size参数配置使用,其中from为要跳过的文档数量,size为要返回的文档数量
在全部文档中,过滤前两个文件,从第3个文档开始,返回10个文档
GET zfc-doc-000001/_search
{
"query": {
"match_all": {
}
},
"size": 10,
"from": 2
}4.2、范围查询
对于范围查询,我们可以使用range查询,最简单的参数就是gte与lte
GET zfc-doc-000001/_search
{
"query": {
"range": {
"agreeNum": {
"gte": 100,
"lte": 300
}
}
}
}4.3、聚合
聚合语法的使用就是对一个文档中某个字段的统计,类似与关系型数据库中的先group 在count一个字段的值,具体使用如下,如果我们不想返回都是哪些数据参与了聚合,还可以加入参数"size":0,如下语句中,其中my_aggs是自定义聚合的名称,terms是聚合的类型,field是要对哪个字段进行聚合,需要注意的是text类型是无法使用聚合的,terms下面的"size":10是指如果聚合桶的数量超过10的话只取前10个
GET zfc-doc-000001/_search
{
"query": {
"match_all": {}
},
"size": 0,
"aggs": {
"my_aggs": {
"terms": {
"field": "title",
"size": 10
}
}
}
}Elasticsearch支持多种聚合类型,每种类型都有不同的功能和用途。以下是一些常用的聚合类型及其含义:
Terms Aggregation(词条聚合):根据指定字段的值进行分组,并计算每个分组的文档数量。可以用于统计某个字段的分布情况。
Range Aggregation(范围聚合):将指定字段的值划分为不同的范围,并计算每个范围内的文档数量。可用于分析数值型字段的分布情况。
Date Histogram Aggregation(日期直方图聚合):根据指定日期字段的值进行分组,并按照时间间隔(如按月、按周)计算每个时间段内的文档数量。
Histogram Aggregation(直方图聚合):根据指定字段的值进行分组,并按照指定的间隔计算每个分组的文档数量。适用于分析数值型字段的分布情况。
Average Aggregation(平均值聚合):计算指定字段的平均值。
Sum Aggregation(求和聚合):计算指定字段的总和。
Min Aggregation(最小值聚合):计算指定字段的最小值。
Max Aggregation(最大值聚合):计算指定字段的最大值。
Cardinality Aggregation(基数聚合):计算指定字段的唯一值的数量。
Stats Aggregation(统计聚合):计算指定字段的统计信息,包括最小值、最大值、平均值、总和和文档数量。
这只是一小部分聚合类型的示例,Elasticsearch还提供了其他类型的聚合,如Percentiles Aggregation(百分位数聚合)、Extended Stats Aggregation(扩展统计聚合)等。你可以根据你的具体需求选择适合的聚合类型,并结合查询条件和其他聚合层级来进行复杂的数据分析和统计。
如果你看到这了,欢迎点个关注、后续推文深度只会越来越深,期待你的关注,让我们共同进步
elasticsearch还支持嵌套聚合,只需要在aggs里面在写一个aggs即可,可以参考如下写法,对该示例不符合,仅供参考
GET /zfc-doc-000001/_search
{
"size": 0,
"aggs": {
"my_aggs1": {
"terms": {
"field": "field1"
},
"aggs": {
"my_aggs2": {
"terms": {
"field": "field2"
},
"aggs": {
"avg_value": {
"avg": {
"field": "numeric_field"
}
}
}
}
}
}
}
}4.4、高亮结果
如果我们想在返回结果中对命中的关键词进行高亮显示可以使用如下语句
GET zfc-doc-000001/_search
{
"query": {
"match": {
"content": "ES"
}
},
"highlight": {
"fields": {
"content": {}
}
}
}默认是在返回结果中加入em标签,如果我们想自定义标签可以使用如下语句,如下示例是改为了strong标签
GET zfc-doc-000001/_search
{
"query": {
"match": {
"content": "es"
}
},
"highlight": {
"pre_tags": ["<strong>"],
"post_tags": ["</strong>"],
"fields": {
"content": {}
}
}
}