【问题标题】:Sorting by recent access in Lucene / Solr按 Lucene / Solr 中的最近访问排序
【发布时间】:2012-03-04 10:57:25
【问题描述】:

在我的 Solr 查询中,我想将最近访问的文档排序到顶部(“访问”的意思是用户操作打开的)。没有其他搜索条件对我有影响:在文本与查询匹配的文档中,我希望它们按最近使用的顺序排列。我只能想到两种方法:

1) 在每个文档中包含一个“上次访问”日期字段,以便 Solr 对其进行排序。有人告诉我,Trie Date 字段可以非常快速地排序。问题当然是使该字段保持最新,这需要存储每个文档的文本,以便我可以删除并重新添加任何具有更新的“上次访问”字段的文档。可变字段可以避免这种情况,但 Lucene/Solr 仍然不提供可变字段。

2) 或者,存储可变的“上次访问”日期并将它们更新到另一个数据库中。这将要求 Solr 返回匹配文档的完整列表,其中可能包含数十万个文档。然后将这个巨大的文档 ID 列表与数据库中的日期进行匹配,然后进行排序。它适用于不常见的搜索词,但不适用于广泛的常见搜索词。

因此要在 1) 索引大小加上每次访问文档时的处理成本和 2) 大查询开销之间进行权衡,尤其是对于没有重点的搜索词

我还有其他选择吗?

【问题讨论】:

标签: solr lucene


【解决方案1】:

【讨论】:

  • 你能解释一下你的答案吗?
  • FTA "ExternalFileField 适用于您希望更频繁地更新许多文档中的特定字段而不是更新其余文档的情况。"
  • "例如,假设您有某种基于查看次数的文档排名。您可能希望每天或每小时更新所有文档的排名,而文档的其余内容可能更新的频率要低得多。如果没有 ExternalFileField,您将需要更新每个文档来更改排名。使用 ExternalFileField 效率更高,因为特定字段的所有文档值都存储在外部文件中,该文件可以频繁更新你愿意。”
  • 谢谢!也许您可以更新您的答案,我认为围绕链接的一些解释不会受到伤害。
  • 更少>>更多。链接的帖子非常不言自明。
【解决方案2】:

您应该能够使用原子更新功能来做到这一点。

http://wiki.apache.org/solr/Atomic_Updates

此功能自 Solr 4.0 起可用。它允许您更新文档中的单个字段,而无需重新索引整个文档。我只从文档中了解此功能。我自己没用过,所以不能说效果如何,有没有什么坑。

【讨论】:

    【解决方案3】:

    绝对使用选项 1,使用 SOLR 查询并根据需要更新 lastAccessed 字段。

    由于 SOLR 4.0 部分文档更新得到了多种支持:https://cwiki.apache.org/confluence/display/solr/Updating+Parts+of+Documents

    对于您的应用来说,一个简单的原子更新似乎就足够了。

    就性能而言,这对于大型集合和快速文档更新应该非常有效。

    【讨论】:

      猜你喜欢
      • 2010-12-21
      • 1970-01-01
      • 2016-09-09
      • 1970-01-01
      • 2011-08-22
      • 2011-07-03
      • 1970-01-01
      • 1970-01-01
      • 2017-09-12
      相关资源
      最近更新 更多