组合查询
bool
把各种其它查询通过must
(必须 )、must_not
(必须不)、should
(应该)的方式进行组合
GET student/_search { "query": { "bool": { "must": [{ "match": { "name": "zhangsan" } }], "must_not": [{ "match": { "age": "40" } }], "should": [{ "match": { "sex": "男" } }] } } }
范围查询
range 查询找出那些落在指定区间内的数字或者时间。range 查询允许以下字符
操作符 | 说明 |
gt | 大于> |
gte | 大于等于>= |
lt | 小于< |
lte | 小于等于<= |
GET student/_search { "query": { "range": { "age": { "gte": 30, "lte": 35 } } } }
模糊查询
返回包含与搜索字词相似的字词的文档。
编辑距离是将一个术语转换为另一个术语所需的一个字符更改的次数。这些更改可以包括:
更改字符(box → fox)
删除字符(black → lack)
插入字符(sic → sick)
转置两个相邻字符(act → cat)
为了找到相似的术语,fuzzy 查询会在指定的编辑距离内创建一组搜索词的所有可能的变体或扩展。然后查询返回每个扩展的完全匹配。
通过 fuzziness 修改编辑距离。一般使用默认值 AUTO,根据术语的长度生成编辑距离。
GET student/_search { "query": { "fuzzy": { "title": { "value": "zhangsan", "fuzziness": 2 } } } }
单字段排序
sort 可以让我们按照不同的字段进行排序,并且通过 order 指定排序的方式。desc 降序,asc升序
GET student/_search { "query": { "match": { "name": "zhangsan" } }, "sort": [{ "age": { "order": "desc" } }] }
高亮查询
Elasticsearch 可以对查询内容中的关键字部分,进行标签和样式(高亮)的设置。
在使用 match 查询的同时,加上一个 highlight 属性:
- pre_tags:前置标签
- post_tags:后置标签
- fields:需要高亮的字段
- title:这里声明 title 字段需要高亮,后面可以为这个字段设置特有配置,也可以空
GET student/_search { "query": { "match": { "name": "zhangsan" } }, "highlight": { "pre_tags": "<font color='red'>", "post_tags": "</font>", "fields": { "name": {} } } }
分页查询
from:当前页的起始索引,默认从 0 开始。 from = (pageNum - 1) * size
size:每页显示多少条
GET student/_search { "query": { "match_all": {} }, "sort": [{ "age": { "order": "desc" } }], "from": 0, "size": 2 }
聚合查询
聚合允许使用者对 es 文档进行统计分析,类似与关系型数据库中的 group by,当然还有很多其他的聚合,例如取最大值、平均值等等。
对某个字段取最大值 max
GET student/_search { "aggs": { "max_age": { "max": { "field": "age" } } }, "size": 0 }
对某个字段取最小值 min
GET student/_search { "aggs": { "min_age": { "min": { "field": "age" } } }, "size": 0 }
对某个字段取平均值 avg
GET student/_search { "aggs": { "avg_age": { "avg": { "field": "age" } } }, "size": 0 }
对某个字段的值进行去重之后再取总数
GET student/_search { "aggs": { "distinct_age": { "cardinality": { "field": "age" } } }, "size": 0 }
State 聚合
stats 聚合,对某个字段一次性返回 count,max,min,avg 和 sum 五个指标
GET student/_search { "aggs": { "stats_age": { "stats": { "field": "age" } } }, "size": 0 }
桶聚合查询
桶聚和相当于 sql 中的 group by 语句
terms 聚合,分组统计
GET student/_search { "aggs": { "age_groupby": { "terms": { "field": "age" } } }, "size": 0 }
在 terms 分组下再进行聚合
GET student/_search { "aggs": { "age_groupby": { "terms": { "field": "age" }, "aggs": { "sum_age": { "sum": { "field": "age" } } } } }, "size": 0 }