我们建立了一个包含 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/