solr 存储文档在给定时间段内被查看的次数

ldxq2e6h  于 2022-11-05  发布在  Solr
关注(0)|答案(1)|浏览(138)

我正在解析网络上的文档,并将它们存储在solr数据库中。每天我都会看到成千上万的文档,其中一些是重复的。
我想为用户提供一个选项来查看在给定日期或给定时间范围内最常看到的文档。感兴趣的查询对应于:

-show me which documents were seen the most on 16/10/2022,
-show me which documents were seen the most between 16/10/2022 and 23/10/2022

在编写solr查询时,您需要指定要搜索的字段名称。我应该使用什么字段类型?我应该以什么格式存储文档在给定日期被查看的次数?

4sup72z8

4sup72z81#

我将如何尝试:

  • 创建一个单独的集合-非常简单的包含字段的集合:
  • 观看时间
  • 文档标识
  • 标题或正文(无论您要查询什么)...对每个视图都执行此操作。
  • 您可以按所需差距进行查询:
curl http://localhost:8983/solr/query -d 'q=title:abc&rows=0&json.facet={
 per_month: { range : {
  field : last_modified,
  start:'2022-01-01T00:00:00Z',
  end:'2022-12-31T23:59:59Z',
  gap:'+1MONTH',
 }}
}}

这将按MONTH返回所有视图(可以将其更改为DAY、YEAR等)。
但是您的文档对于这个解决方案来说可能太大了。
从solr 8.6开始,你现在可以在多个碎片上进行跨集合连接。
JOIN查询将 * 快得多 *。
如果您不想执行JOIN查询:

  • 如果视图经常更改,不要将其存储在文档存储区中。solr中没有局部更新的概念。如果您每天都更新视图,则需要更新每个已查看的文档。这将导致大量不必要的磁盘抖动。

其他想法:

  • 你会使用数据库吗?这是一个更好的视图的使用。Solr不适合作为视图的主记录。
  • 另一个建议是让浏览量进入分析引擎--这是一个更好的解决方案,因为你可以获得关于实际用户的丰富分析。分析引擎做了很多呈现浏览量所做不到的事情--特别是过滤掉误报(比如僵尸!)。如果你有一个高流量的网站,保持一个准确的浏览量并不有趣。
  • 在过去,我使用分析引擎来收集数据,并使用分析引擎将数据导出到solr中。这样,您就可以通过最了解视图的软件组件(分析引擎,如Google分析或Salesforce营销引擎)来完成视图逻辑,并使用上述策略之一运行每小时一次的流程来更新solr中的视图。

相关问题