【问题标题】:Solr search query time increases as the start keeps on increasingSolr 搜索查询时间随着开始时间的增加而增加
【发布时间】:2013-12-11 14:45:42
【问题描述】:

我目前在 Solr 中有超过 2500 万个文档,并且数量会逐渐增加。我需要在如此大的 Solr 索引中搜索记录。当 start 较低时,查询响应时间很短,例如 0。但是随着 start 增加,例如 100000 ,在 Solr 中搜索也需要时间。即使在 Solr 中的大型数据集上具有高起始数,我如何才能使搜索更快?行保持不变,只有开始不断增加。我不希望响应时间随着开始时间的增加而增加,而是希望为start=100000 返回的结果应该与start=0 的时间相同,假设rows=1000 因为这是性能问题。任何帮助将不胜感激。

【问题讨论】:

  • 如果想了一会儿,您能否提供更多细节,为什么要深入研究结果?我认识的大多数人都不会阅读结果的第 1000 个条目,他们会从更好的搜索开始。

标签: java solr


【解决方案1】:

您面临的问题称为Deep Paging。在 Solr 的追踪器上,solr.plan incomplete issue 上有 a good article about it

文章中提到的解决方案将要求您对结果进行排序,如果这对您不可行,则该解决方案将不起作用。这个想法是按一个稳定的属性排序,在文章中是price,然后用一个价格范围过滤,比如fq=price:[9000+TO+10000]

如果您将 fq 与合适的 start 结合使用 - 例如 start=100030 - 您将获得更好的性能,因为 solr 不会收集与 fq 不匹配的文档。

但您至少需要提前进行一次查询才能获取合适的元数据,例如已经找到了多少文档。

【讨论】:

  • 感谢您的回复。我怀疑在应用程序中使用过滤器查询,因为我只做文本索引,查询更多的是ANDOR,而不是范围查询。 Solr 的跟踪器解决方案是我真正在寻找的东西,但它不完整,没有看到任何与此相关的好工作。
  • 您的查询是什么样的并不重要。问题是您是否需要按相关性排序才能使用 fq-technique。
  • 我不需要使用 fq-technique。但是,我接受您的回答,因为这可能对其他人有帮助。
【解决方案2】:

随着 Solr 4.7 的发布,引入了一个新功能Cursors。这样做正是为了解决 Deep Paging 的问题。如果您仍然有问题并且您可以升级到 Solr 4.7,这是您的最佳选择。

关于使用 Solr 进行深度分页的一些参考

【讨论】:

    猜你喜欢
    • 2012-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多