首页 > 解决方案 > 弹性搜索文档查看次数

问题描述

我有一个 Web 应用程序,用于在 Elastic Search 中搜索和查看文档。现在的目标是保持两个值。1. 文档总共被提取了多少次(生命周期视图) 2. 在过去 30 天内文档被提取了多少次。

实现第一个是有可能的,但第二个似乎是一个非常困难的问题。这两个值需要成为文档的一部分,因为它们将用于对结果进行排序。

实现这一目标的最佳方法是什么。

标签: algorithmelasticsearch

解决方案


要维护这样的过期数据,您需要存储每个视图及其时间戳。我想您可以将它们存储在 ES 文档中的数组中,但是这样做会遇到麻烦,因为每次查看文档时都需要调用的更新操作必须删除并重新创建文档(这就是 ES 更新的方式),如果两个视图同时发生,则很难确保它们都被存储。

有两种方法可以存储视图,并在查询中使用它们:

  1. 将它们放在单独的存储中(如果您愿意,可以在 ES 中使用不同的索引),并每天运行一个 cron 作业或类似的作业,以使用视图存储中最近三十天的视图数更新主索引中的每个项目. 即使有大量数据,也应该可以使其非常高效,具体取决于您选择的视图存储。

  2. 使用 ElasticSearch父/子数据类型将视图作为子文档存储在与主文档相同的索引中。我不确定我是否特别推荐这种方法,但我认为应该可以使用聚合编写一个查询,按子项数量(按日期过滤)对主文档进行排序。不过可能会很慢。

我怀疑当前版本的 ES 是否有任何其他方法可以做到这一点,因为它不支持跨索引连接。要么数据必须预先聚合到文档中,要么必须在同一个索引中可用。


推荐阅读