前言
本章讲解ES的DSL搜索,以及它的高亮显示和聚合操作
方法
1.DSL(Domain Specific Language)搜索
在上一章节,我们学习了有关文档的查询操作,我们使用了类似——_search?q=属性:属性值。
如果我们的查询条件足够复杂的话,其将无法满足我们的要求,这个时候就需要用到DSL搜索了!
语法:POST /{索引}/{索引类型}/_search
参数:查询条件请求体
范例1:查询用户年龄为34的数据
查询条件请求体:
{
"query": {
"match": {
"age": 34
}
}
}
范例2:查询用户年龄大于26岁且性别为男的数据
这里我们首先构造五条数据:
发送查询请求:
{
"query": {
"bool": {
"filter": {
"range": {
"age": {
"gt": 26
}
}
},
"must": {
"match": {
"sex": "男"
}
}
}
}
}
查询的结果如下所示:
很显然,这是满足我们的条件的两条数据!
范例3:查询名字为魏大勇和秀琴的相关信息
发送查询请求:
查询条件请求体:
{
"query": {
"match": {
"name": "魏大勇 秀琴"
}
}
}
查询结果如下:
本次仅仅是入门基本的DSL查询,更多的查询后面会讲到!
2.ES的高亮显示
在ES中,如果需要高亮显示,仅仅在DSL查询加入如下属性即可!
范例1:查询用户名称为张三的数据,并高亮显示名字
查询条件请求体:
{
"query": {
"match": {
"name": "张三"
}
},
"highlight": {
"fields": {
"name": {}
}
}
}
查询结果如下:
3.ES的聚合操作
我们可以这样理解,ES的聚合操作实际上和关系数据库的分组操作类似。
我们构造如下数据:
范例:查询所有数据,按照年龄分组
查询条件请求体:
{
"aggs": {
"all_interests": {
"terms": {
"field": "age.keyword"
}
}
}
}
查询结果如下: