Elasticsearch条件查询、聚合查询之分组/分页/多条件/范围等

2023-06-01 00:00:00 查询 分页 分组

Elasticsearch条件查询

1、条件查询

GET 请求:

http://127.0.0.1:9200/索引名称/_search

以下是根据分类名称category 进行模糊查询,输入“小”或者“米”都可以查询出对应数据

{
"query" : {
   "match" : {// match_phrase完全匹配
   "category" : "小米"
   }
   }
}

ps:

高亮显示示例

{
   "query" : {
       "match" : {
       "category" : "小米"
       }
   },
   "highlight" : {
       "fields" : {
       "category" : {}
       }
   }
}

效果:

...
"highlight": {
   "category": {
   "<em>小</em><em>米</em>"
   }
}

2、分页查询

GET 请求:

http://127.0.0.1:9200/索引名称/_search
{
   "query" : {
       "match_all" : {// 表示查询全部数据
       }
   },
   "from" : 0,  // 查询页数,页数=当前页-1
   "size" : 2,   // 每页条数
       "_source" : ["title", "price"],   // 指定显示的字段名
   "sort" : {  // 根据price进行desc倒序
       "price" : {
       "order" : "desc"
       }
   }
}

下图结果

1647226078772202.png

3、多条件查询

{
   "query" : {
   "bool" : {
         // 查询category分类叫小米 并且/或者 查询price价格等于2999的数据
   "must" : [//“must”必须,相当于并且AND条件;“should”应该,相当于或者OR条件
       {
           "match" : {
           "category" : "小米"
           }
       },
       {
           "match" : {
           "price" : 2999
           }
       }
   ],
   // 查询price价格大于5000的数据
   "filter" : {
       "range" : {
           "price" : {
           "gt" : 5000
           }
       }
   }
   }
   }
}


Elasticsearch聚合查询

1、分组查询

下图是根据价格price字段进行商品的分组,

可以看到:

2999的商品数量是4,3999的商品数量是1

{
   "aggs" : {  // 聚合操作
       "price_group" : {  // 名称(自定义)
           "terms" : { // 分组
           "field" : "price"  // 字段
           }
       }
   }
}

如果只想显示分组信息,不想展示其中的数据内容,可以设置size为 0,

下图可以看到,数据内容为空数组

{
   "aggs" : {
       "price_group" : {
           "terms" : {
           "field" : "price"
           }
       }
   },
   "size" : 0
}

如果想求价格平均值,可以进行如下操作:

{
   "aggs" : {  // 聚合操作
       "price_avg" : {  // 名称(自定义)
           "avg" : { // 平均值
           "field" : "price"  // 字段
           }
       }
   }
}

相关文章