Mic*_*ren 9 pagination faceted-search elasticsearch
假设我有经销商车上的汽车索引.每个文档类似于以下内容:
{
color: 'red',
model_year: '2015',
date_added: '2015-07-20'
}
Run Code Online (Sandbox Code Playgroud)
假设我有一百万辆汽车.
假设我想要展示最近增加的1000辆汽车的视图,以及这1000辆汽车的方面.
我可以只使用from并size进行分页结果高达1000固定的限制,但这样做的总数和面的model_year和color(即聚合)我从Elasticsearch背后,是不对的-它们在整个匹配的集.
如何将搜索限制为最近添加的1000个文档以进行分页和聚合?
正如您可能在文档中看到的那样,聚合是在查询本身的范围内执行的。match_all如果未给出查询,则对结果列表执行聚合。即使您在查询级别使用size,它仍然不会为您提供所需的内容,因为这只是从查询匹配的所有文档中返回一组size文档的方法。聚合根据查询匹配的内容进行操作。
此功能请求并不是新的,并且在不久前就已被请求过。
在 1.7 中没有直接的解决方案。也许您可以使用limit 过滤器或Terminate_after体内请求参数,但这不会返回也已排序的文档。这将为您提供与查询匹配的第一个 terminate_after文档数量,并且该数量是每个分片的。应用排序后不会执行此操作。
在 ES 2.0 中,还有采样器聚合,其工作方式与正在工作的方式大致相同terminate_after,但它考虑了每个分片中要考虑的文档的分数。如果您只是排序date_added并且查询只是一个,match_all则所有文档都将具有相同的分数,并且它将返回一组不相关的文档。
综上所述:
对此没有好的解决方案,有针对每个分片的文档数量的解决方法。所以,如果你想要 1000 辆汽车,那么你需要用这个数字除以主分片的数量,将其用于sampler聚合或与terminate_after并获得一组文档
我的建议是使用查询来通过不同的标准限制文档(汽车)的数量。例如,显示(并汇总)过去 30 天内的汽车或类似内容。这意味着,条件应包含在查询本身中,以便生成的文档集成为您希望聚合的文档集。在排序后将聚合应用于一定数量的文档并不容易。
| 归档时间: |
|
| 查看次数: |
318 次 |
| 最近记录: |