【发布时间】:2011-04-02 06:33:22
【问题描述】:
我正在使用 Solr 进行实时搜索索引。我的数据集大约有 60M 大文档。我需要按时间排序,而不是按相关性排序。目前我在查询中使用排序标志按时间排序。这适用于特定搜索,但是当搜索返回大量结果时,Solr 必须获取所有结果文档并在返回之前按时间对它们进行排序。这很慢,必须有更好的方法。
有什么更好的方法?
【问题讨论】:
我正在使用 Solr 进行实时搜索索引。我的数据集大约有 60M 大文档。我需要按时间排序,而不是按相关性排序。目前我在查询中使用排序标志按时间排序。这适用于特定搜索,但是当搜索返回大量结果时,Solr 必须获取所有结果文档并在返回之前按时间对它们进行排序。这很慢,必须有更好的方法。
有什么更好的方法?
【问题讨论】:
我找到了答案。
如果您想按时间而非相关性进行排序,请对所有过滤器使用 fq= 而不是 q=。这样,Solr 就不会浪费时间找出匹配 q= 的文档的加权值。事实证明,Solr 花费了太多时间加权,而不是排序。
此外,您可以通过预热 solrconfig.xml 中的 newSearcher 和 firstSearcher 事件侦听器中的排序字段来加快排序。这将确保通过缓存完成排序。
【讨论】:
显而易见的第一个问题:您的时间字段的类型是什么?如果是字符串,那么排序显然很慢。 tdate 甚至比 date 还要快。
还有一点:你有足够的内存供 Solr 使用吗?如果它开始交换,那么性能会立即变得糟糕。
第三个:如果你有旧的 Lucene,那么date 只是字符串,这很慢。
【讨论】:
警告:野蛮建议,并非基于先前的经验或已知事实。 :)
x 是我们将找到所需数量的匹配文档的估计时间段(以天为单位)。对于初学者,您可以使用以下估算x:
如果您每天将n 文档统一添加到大小为N 文档的索引中,并且在步骤#1 中与d 文档匹配的特定查询,那么要获得顶部的r 结果,您可以使用@ 987654328@。如果您不得不在第 3 步中过于频繁地放松过滤器,请根据需要慢慢增加公式中的值 1.2。
【讨论】: