Elasticsearch条件查询、聚合查询之分组/分页/多条件/范围等
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"
}
}
}
下图结果
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" // 字段
}
}
}
}
相关文章