Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Lucene/Solr中按最近访问进行排序_Solr_Lucene - Fatal编程技术网

在Lucene/Solr中按最近访问进行排序

在Lucene/Solr中按最近访问进行排序,solr,lucene,Solr,Lucene,在我的Solr查询中,我希望将最近访问的文档排序到顶部(“已访问”表示由用户操作打开)。没有其他搜索条件对我有权重:在文本与查询匹配的文档中,我希望它们按最近使用的顺序排列。我只能想到两种方法: 1) 在每个要进行Solr排序的文档中包含“上次访问”日期字段。有人告诉我,Trie日期字段可以很快排序。当然,问题是要使字段保持最新,这需要存储每个文档的文本,以便我可以删除并重新添加任何具有更新的“上次访问”字段的文档。可变字段可以避免这种情况,但Lucene/Solr仍然不提供可变字段 2) 或者

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

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

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

因此,折衷是1)索引大小加上每次访问文档时的处理成本和2)巨大的查询开销,特别是对于未聚焦的搜索词

我有其他选择吗?


您应该能够使用原子更新功能来完成此操作


此功能从Solr 4.0开始提供。它允许您更新文档中的单个字段,而无需重新编制整个文档的索引。我仅从文档中了解此功能。我自己没有使用过它,所以我不能说它工作得有多好或者是否有任何缺陷。

一定要使用选项1,使用SOLR查询并根据需要更新LastAccess字段

由于SOLR 4.0部分文档更新在以下几个方面受到支持:

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


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

请您解释一下您的答案好吗?FTA“ExternalFileField在许多文档中更新特定字段的频率比更新其余文档的频率更高的情况下非常方便。”例如,假设您有某种基于视图数的文档排名。您可能希望每天或每小时更新所有文档的排名,而文档的其余内容更新频率可能要低得多。如果没有ExternalFileField,您只需更新每个文档即可更改排名。使用ExternalFileField效率更高,因为特定字段的所有文档值都存储在一个外部文件中,可以随时更新。“谢谢!也许你可以更新你的答案,我认为关于链接的一些解释不会有什么坏处。更少>>更多。链接的帖子都是不言自明的方式。”。