lucene - Solr/Lucene性能问题中按日期排序

标签 lucene solr

我们建立了一个包含 3600 万个文档(每个约 1K-2K)的 Solr 索引,我们尝试查询最多 100 个与单个简单关键字匹配的文档。正如我们所希望的那样,这工作得非常快。 但是,如果我们现在将“&sort=createDate+desc”添加到查询中(从而请求与查询匹配的前 100 个"new"文档),它会运行很长时间,最终导致 OutOfMemoryException。 根据我从手册中了解到的情况,这是由于 Lucene 在执行查询之前需要将该字段 (createDate) 的所有不同值加载到内存中 (FieldCache afaik)。由于 createDate 字段包含日期和时间,因此不同值的数量非常大。 另外值得一提的是,我们经常更新索引。

也许有人可以提供一些关于我们如何调整 Lucene/Solr 或改变我们的方法以使查询时间变得可以接受的见解和方向? 非常感谢您的意见!谢谢。

最佳答案

问题是 Lucene 将数字存储为字符串。有一些实用程序将日期拆分为 YYYY、MM、DD 并将它们放在不同的字段中。这会产生更好的结果。

较新版本的 Lucene(2.9 及更高版本)支持数字字段并且性能改进显着(几个数量级,IIRC。)检查 this有关数字查询的文章。

关于lucene - Solr/Lucene性能问题中按日期排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1819168/

相关文章:

c# - 如何在 Lucene.Net 中使用 Whitespaceanalyzer 和 LowerCase 过滤器创建自己的分析器?

java - 在 apache solr 中搜索 *n@domain* 时出错

search - 为什么大约 1M 文档的搜索性能很慢 - 如何扩展应用程序?

search - 在 Web 项目中使用 SOLR 的最佳方法是什么?

java - 使用 Lucene 分析器进行 QueryDSL 和 Hibernate 搜索

java - 在lucene中添加对象列表

linux - 在 Tomcat 中更改时区

solr - Solr 索引中缺少 Id 字段

solr - 如果我们要用Hadoop和Solr做一个搜索引擎,NUTCH的作用是什么?

java - Solr 查询列表?