先將文本 field
的 fielddata
屬性設置爲 true
- Elasticsearch 5.x 版本寫法
PUT /ecommerce/_mapping/product
- Elasticsearch 7.x 版本寫法
PUT /ecommerce/_mapping/product?include_type_name=true
{
"properties": {
"tags": {
"type": "text",
"fielddata": true
}
}
}
注意:
es
不同版本之間語法存在差異
計算每個商品tag
下的商品數量(分組求和)
GET /ecommerce/product/_search
{
"size": 0,
"aggs": {
"group_by_tags": {
"terms": {
"field": "tags"
}
}
}
}
size
控制元數據返回的數目,0 則不返回元數據
對名稱中包含 yagao
的商品,計算每個 tag
下的商品數量
GET /ecommerce/product/_search
{
"size": 0,
"query": {
"match": {
"name": "yagao"
}
},
"aggs": {
"group_by_tags": {
"terms": {
"field": "tags"
}
}
}
}
計算每個 tag
下的商品平均價格
GET /ecommerce/product/_search
{
"size": 0,
"aggs": {
"group_by_tags": {
"terms": {
"field": "tags"
},
"aggs": {
"avg_price": {
"avg": {
"field": "price"
}
}
}
}
}
}
計算每個 tag
下的商品平均價格,並將結果按照平均價格降序排序
GET /ecommerce/product/_search
{
"size": 0,
"aggs": {
"group_by_tags": {
"terms": {
"field": "tags",
"order": {
"avg_price": "asc"
}
},
"aggs": {
"avg_price": {
"avg": {
"field": "price"
}
}
}
}
}
}
按照指定的價格範圍區間進行分組,然後在每組內在按照tag進行分組,最後再計算每組的平均價格
GET /ecommerce/product/_search
{
"size": 0,
"aggs": {
"group_by_price": {
"range": {
"field": "price",
"ranges": [
{
"from": 0,
"to": 20
},
{
"from": 20,
"to": 40
},
{
"from": 40,
"to": 60
}
]
},
"aggs": {
"group_by_tags": {
"terms": {
"field": "tags"
},
"aggs": {
"avg_price": {
"avg": {
"field": "price"
}
}
}
}
}
}
}
}