当前位置: 首页 > 知识库问答 >
问题:

在弹性搜索的聚合中实现分页时,为什么“from”关键字无法识别

孙梓
2023-03-14

我试图在聚合中一次分页50个数据,所以我用下面的代码进行了尝试。

 "aggs": {
            "source_list": {
                "terms": {
                    "field": "source.keyword",
                    "from": 0,
                    "size": 50,
                },
            },
        },

这听起来很直截了当,但我却因为以下错误而触底。

{"detail":"RequestError(400, 'x_content_parse_exception', '[1:59] [terms] unknown field [from]')"}

共有3个答案

谢飞舟
2023-03-14

“发件人”和“查询中的大小”在聚合中不可用

您可以使用以下选项来分页:-

  1. 复合聚合:可以在单个bucket中组合多个数据源,并允许对其进行分页和排序。它只能使用after\u键进行线性分页,即不能从第1页跳到第3页。您可以获取“n”条记录,然后在键之后传递返回的,然后获取下一条“n”条记录
GET index22/_search
{
 "size": 0,
 "aggs": {
   "pagination": {
     "composite": {
       "size": 1,
       "sources": [
         {
           "source_list": {
             "terms": {
               "field": "sources.keyword"
             }
           }
         }
       ]
     }
   }
 }
}

结果:

"aggregations" : {
    "pagination" : {
      "after_key" : {
        "source_list" : "a" --> used to fetch next records linearly
      },
      "buckets" : [
        {
          "key" : {
            "source_list" : "a"
          },
          "doc_count" : 1
        }
      ]
    }
  }

获取下一条记录

{
  "size": 0,
  "aggs": {
    "pagination": {
      "composite": {
        "size": 1,
        "after": {"source_list" : "a"}, 
        "sources": [
          {
            "source_list": {
              "terms": {
                "field": "sources.keyword"
              }
            }
          }
        ]
      }
    }
  }
}
GET index/_search
{
  "size": 0,
  "aggs": {
    "source_list": {
      "terms": {
        "field": "sources.keyword",
        "include": {
          "partition": 1,
          "num_partitions": 3
        }
      }
    }
  }
}

GET index/_search
{
  "size": 0,
  "aggs": {
    "source_list": {
      "terms": {
        "field": "sources.keyword",
        "size": 10000 --> use large value to get all terms
      },
      "aggs": {
        "my_bucket": {
          "bucket_sort": {
            "sort": [
              {
                "_key": {
                  "order": "asc"
                }
              }
            ],
            "from": 1, 
            "size": 1
          }
        }
      }
    }
  }
}

就性能而言,复合聚合是更好的选择

卫甫
2023-03-14

您只能对返回结果进行分页,而不能在聚合中:

{
      "query": {
          ....
      },
      "from":0
      "size":50,
      "aggs":{
          ....
      }
}
班建义
2023-03-14

Elasticsearch不支持聚合中的分页

由于仅支持size,因此您必须从aggs查询中删除中的参数。如果存储桶的总大小合理,则只需将大小的值增加到最大。否则您可以尝试对聚合进行分区。

例如:

"aggs": {
    "source_list": {
        "terms": {
            "field": "source.keyword",
            "size": 50,
            "include": {
                "partition": 0,
                "num_partitions": 10
            }
        },
    },
}
  • 为num\u分区选择一个值,将该数字分成更易于管理的块

来源:带有分区的Elasticsearch过滤值

 类似资料:
  • 我需要在其中一个索引中进行聚合排序分页。 我了解了弹性搜索的内部功能, 我总共有5个分片,它会对各个分片进行排序并获取结果,默认情况下每个分片将返回10条记录。然后再次对50条记录进行排序,它将获取前10条记录,因为默认大小为10。 输出: 聚合结果在名为“聚合”的单独字段中返回。为了在此聚合数据中进行分页,size和from不起作用。 厌倦了做termBuilder.size(500),现在逻辑

  • 我如何对键上的elasticsearch聚合桶进行排序。我有嵌套的聚合,想对我的第二个聚合桶结果进行排序。 就像我有: 我希望我的< code >事件聚集桶在关键< code >印象或< code >页面视图上按desc/asc排序。我如何实现这样的结果集? 这是我的查询 我试过使用_key,但它在桶内排序。我想通过查看所有桶来排序。就像我有一个键。我希望我的桶结果用这个键排序。不在桶内。 我希望

  • 这是我的示例文档,我在kibana的帮助下为类似文档编制索引。 现在在文件中,“体验”下的关键“品牌”是主集团“公司”的子集团。正如您在文档中看到的,“品牌”可能有类似于“其他”的条目,但由“公司”键分隔。类似的结构可以在文档内部和文档之间出现。我打算根据“品牌”和“公司”来汇总文档。我尝试的查询是- 我得到的错误为- 这是我的文档的映射- 我知道我的经验字段没有嵌套,可能是这个错误的原因。我对e

  • 我已经为一个问题挣扎了一段时间,所以我想我应该通过stackoverflow来解决这个问题。 “我的文档类型”有一个标题、一个语言字段(用于筛选)和一个分组id字段(我省略了所有其他字段以保持重点) 搜索文档时,我希望找到包含标题中文本的所有文档。对于每个唯一的分组id,我只需要一个文档。 我一直在关注tophits聚合,从我所看到的情况来看,它应该能够解决我的问题。 对我的索引运行此查询时: 我

  • 如何在elasticsearch聚合中使用分页(size和from),我在Agregition中使用了size和from,它为exmaple抛出异常<我想问一下? 得到 /index/nameorder/_search

  • 我知道elasticsearch允许子聚合(即嵌套聚合),但是我想对“第一次”聚合的结果应用聚合(或者在通用的任何查询中-聚合与否)。 具体示例:我记录有关用户操作的事件(为简单起见,我有带有和的文档)。我可以进行查询,计算每个用户执行的操作数量。但是我想找出“活跃用户”的百分比(或计数)(例如,执行了10个以上操作的用户)。理想的结果是所有用户的直方图,显示用户的活跃程度。 有没有办法创建这样的