elasticsearch post 聚合显示百分比代码
时间: 2024-05-07 19:18:54 浏览: 4
以下是一个示例聚合查询,它将文档按照某个字段进行分组,并计算每组文档的占比:
```json
{
"aggs": {
"group_by_field": {
"terms": {
"field": "some_field"
},
"aggs": {
"percentage": {
"bucket_script": {
"buckets_path": {
"count": "_count"
},
"script": "params.count / _index['some_index']['_count'] * 100"
}
}
}
}
}
}
```
在上面的查询中,我们使用了 Elasticsearch 的聚合功能。首先,我们按照 `some_field` 字段进行分组。然后,我们在每个分组上使用 `bucket_script` 聚合来计算每组文档的占比。`buckets_path` 参数指定了要使用的文档数量,然后我们使用一个脚本来计算占比,将结果存储在 `percentage` 聚合中。
注意,这个示例中的脚本使用了 `_index['some_index']['_count']` 来获取整个索引中的文档数量。请注意将其替换为您实际使用的索引名称。
相关问题
elasticsearch 聚合显示百分比代码
以下是一个 elasticsearch 聚合显示百分比的例子:
假设你有一个索引,其中有一个数字字段 "price",你想聚合价格字段并显示价格百分比的数量分布。以下是一个示例聚合查询:
```
GET /my_index/_search
{
"size": 0,
"aggs": {
"price_range": {
"range": {
"field": "price",
"ranges": [
{ "to": 10 },
{ "from": 10, "to": 20 },
{ "from": 20, "to": 30 },
{ "from": 30 }
]
},
"aggs": {
"price_percent": {
"percentiles": {
"field": "price"
}
}
}
}
}
}
```
这个聚合查询将会按价格区间进行分组,然后在每个价格区间内计算价格的百分位数。你可以根据需要修改价格区间的范围。
elasticsearch 聚合显示占比代码
以下是一个使用 Elasticsearch 聚合显示占比的示例代码:
```python
from elasticsearch import Elasticsearch
es = Elasticsearch()
# 构建聚合查询
aggs = {
"group_by_state": {
"terms": {"field": "state.keyword"},
"aggs": {
"group_by_city": {
"terms": {"field": "city.keyword"}
}
}
}
}
# 执行查询
result = es.search(
index="your_index",
body={"size": 0, "aggs": aggs}
)
# 解析结果并输出占比
total = result["hits"]["total"]["value"]
for state in result["aggregations"]["group_by_state"]["buckets"]:
state_name = state["key"]
state_count = state["doc_count"]
state_percent = state_count / total * 100
print(f"{state_name}: {state_percent:.2f}%")
for city in state["group_by_city"]["buckets"]:
city_name = city["key"]
city_count = city["doc_count"]
city_percent = city_count / total * 100
print(f"- {city_name}: {city_percent:.2f}%")
```
这里的查询是以 state 和 city 两个字段分组,然后计算每个分组的文档数占总文档数的比例。输出的结果类似于:
```
California: 50.00%
- Los Angeles: 20.00%
- San Francisco: 30.00%
New York: 30.00%
- New York City: 20.00%
- Buffalo: 10.00%
Texas: 20.00%
- Austin: 10.00%
- Houston: 10.00%
```