elasticsearch - 未根据 ES 查询中传递的大小参数进行聚合
问题描述
我的 ES 查询看起来像这样。我试图获得从 0 到 9 的索引的平均评分。但是 ES 正在取所有记录的平均值。
GET review/analytics/_search
{
"_source": "r_id",
"from": 0,
"size": 9,
"query": {
"bool": {
"filter": [
{
"terms": {
"b_id": [
236611
]
}
},
{
"range": {
"r_date": {
"gte": "1970-01-01 05:30:00",
"lte": "2019-08-13 17:13:17",
"format": "yyyy-MM-dd HH:mm:ss"
}
}
},
{
"terms": {
"s_type": [
"aggregation",
"organic",
"survey"
]
}
},
{
"bool": {
"must_not": [
{
"terms": {
"s_id": [
392
]
}
}
]
}
},
{
"term": {
"status": 2
}
},
{
"bool": {
"must_not": [
{
"terms": {
"ba_id": []
}
}
]
}
}
]
}
},
"sort": [
{
"featured": {
"order": "desc"
}
},
{
"r_date": {
"order": "desc"
}
}
],
"aggs": {
"avg_rating": {
"filter": {
"bool": {
"must_not": [
{
"term": {
"rtng": 0
}
}
]
}
},
"aggs": {
"rtng": {
"avg": {
"field": "rtng"
}
}
}
},
"avg_rating1": {
"filter": {
"bool": {
"must_not": [
{
"term": {
"rtng": 0
}
}
]
}
},
"aggs": {
"rtng": {
"avg": {
"field": "rtng"
}
}
}
}
}
}
查询结果显示 doc_count 为 43 。而我希望它是 9,以便我可以正确计算平均值。我已经指定了上面的尺寸。查询结果似乎计算正确,但聚合结果不正确。
解决方案
from
并且size
对聚合没有影响。hits.hits
它们只定义数组中将返回多少个文档。
聚合始终在您的query
部分中的任何查询选择的整个文档集上运行。
如果您知道“前”九个文档的 ID,则可以在查询中添加一个terms
查询,以便仅选择这 9 个文档,从而仅计算这 9 个文档的平均评分。
推荐阅读
- javascript - Discord.JS 尝试更新 VoiceChannel 时出现奇怪问题
- sqlite - SQLite 日期格式为字符串/文本,但没有前导零 - 如何获取日期?
- reactjs - docker bind mount 在反应应用程序中不起作用
- c# - 为什么使用 C#/ElasticSearch 进行此 NEST 通配符搜索没有返回任何文档?
- pandas - Pandas 过滤多级列索引和带排序的转置表
- json - SAP 表结构继续通过 XML 传递表
- javascript - 使用列表 json 数据创建表 html 并添加过滤器选择下拉列表
- oracle-apex - Oracle APEX:如何以编程方式隐藏 IG APEX$ROW_SELECTOR
- string - LUA:从给定的数值生成唯一的 Mac
- python - 将本地时间戳转换为UTC python