我们建立了一个包含 3600 万个文档(每个约 1K-2K)的 Solr 索引,并且我们尝试查询最多 100 个与单个简单关键字匹配的文档。正如我们所希望的那样,这工作得非常快。
但是,如果我们现在将“&sort=createDate+desc”添加到查询中(从而要求匹配查询的前 100 个“新”文档),它会运行很长很长的时间,最终导致 OutOfMemoryException。
根据我从手册中了解到的情况,这是由于 Lucene 需要先将该字段 (createDate) 的所有不同值加载到内存中(FieldCache afaik),然后才能执行查询。由于 createDate 字段包含日期和时间,因此不同值的数量非常大。
另外值得一提的是我们经常更新索引。
也许有人可以提供一些关于如何调整 Lucene / Solr 或改变我们的方法以使查询时间变得可接受的见解和方向?
我们将非常感谢您的意见!谢谢。
问题是 Lucene 将数字存储为字符串。有一些实用程序将日期拆分为 YYYY、MM、DD 并将它们放在不同的字段中。这会带来更好的结果。
较新版本的 Lucene(2.9 及以上)支持数字字段,并且性能改进非常显着(几个数量级,IIRC。)this http://www.lucidimagination.com/blog/2009/05/13/exploring-lucene-and-solrs-trierange-capabilities/关于数字查询的文章。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)