elasticsearch 如何使用Elasticsearch中的分页计算前n个文档的面/聚合?,elasticsearch,pagination,faceted-search,elasticsearch,Pagination,Faceted Search" /> elasticsearch 如何使用Elasticsearch中的分页计算前n个文档的面/聚合?,elasticsearch,pagination,faceted-search,elasticsearch,Pagination,Faceted Search" />

elasticsearch 如何使用Elasticsearch中的分页计算前n个文档的面/聚合?

elasticsearch 如何使用Elasticsearch中的分页计算前n个文档的面/聚合?,elasticsearch,pagination,faceted-search,elasticsearch,Pagination,Faceted Search,假设我有一个经销商停车场的汽车指数。每个文件类似于以下内容: { color: 'red', model_year: '2015', date_added: '2015-07-20' } 假设我有一百万辆汽车 假设我想展示最近添加的1000辆汽车的视图,以及1000辆汽车上的刻面 我可以使用from和size将结果分页到1000个固定限制,但这样做时,我从Elasticsearch中得到的车型年份和颜色(即聚合)上的总数和面都不正确——它们超过了整个匹配集 如何将搜索限制为最近添加

假设我有一个经销商停车场的汽车指数。每个文件类似于以下内容:

{
  color: 'red',
  model_year: '2015',
  date_added: '2015-07-20'
}
假设我有一百万辆汽车

假设我想展示最近添加的1000辆汽车的视图,以及1000辆汽车上的刻面

我可以使用
from
size
将结果分页到1000个固定限制,但这样做时,我从Elasticsearch中得到的
车型年份
颜色
(即聚合)上的总数和面都不正确——它们超过了整个匹配集


如何将搜索限制为最近添加的1000个文档进行分页和聚合?

正如您可能在文档中看到的,聚合是在查询本身的范围内执行的。如果未给出任何查询,则在结果的
match_all
列表上执行聚合。即使在查询级别使用
size
,它也不会提供您所需的内容,因为
size
只是从查询匹配的所有文档中返回一组文档的一种方法。聚合对查询匹配的内容进行操作

此功能请求不是新的,在一段时间以前就已经存在了

在1.7中,没有直接的解决方案。也许您可以使用or-in-body-request参数,但这不会返回已排序的文档。这将为您提供与查询匹配的文档数后的第一个
终止\u,该数字为每个碎片。在应用排序后不会执行此操作

在ES 2.0中,还有一个与
工作后的terminate\u的工作方式大致相同的方法,但这个方法考虑了每个碎片中要考虑的文档的分数。如果您只是在添加的日期之后进行排序,并且查询只是一个匹配,那么所有文档都将具有相同的分数,并且将返回一组不相关的文档

总之:

  • 对于这一点,没有好的解决方案,存在每个碎片的文档数的变通方法。因此,如果您想要1000辆车,那么您需要将这个数字除以主要碎片的数量,在
    sampler
    聚合中使用它,或者在
    terminate\u之后使用它,然后获得一组文档

  • 我的建议是使用一个查询来限制不同条件下的文档(CAR)数量。例如,显示(并汇总)过去30天或类似时间内的汽车。也就是说,条件应该包含在查询本身中,以便生成的文档集就是您希望它聚合的文档集。对一定数量的文档排序后应用聚合并不容易


你能显示你正在使用的查询吗?@Val-查询部分没有那么有趣,甚至可能是所有的匹配项。e、 g.
{“sort”:{“date_added”:{“order”:“desc”}}
分页是用于聚合的结果。@andrestefan鉴于我的集合相对较小,也许我应该总是检索200个文档,并在Elasticsearch之外进行分页?那么,也许我所需要的只是一种将聚合范围扩大到前N个文档的方法(那时不需要从
中选择)――这可能吗?您正在寻找的功能是什么?