dev*_*rts 3 c# memory performance lucene.net
我有一个包含10个字段的Lucene.net索引,其中一些是存储的,一些是索引的,有4.6亿个文档.该指数约为250GB.我正在使用Lucene.net 3.0.3并且每次进行搜索时我都会在RAM中轻松吃掉2GB +,这会导致我的32位应用程序出现内存异常.遗憾的是,由于其他32位依赖项,我无法将应用程序作为64位进程运行.
据我所知,我正在遵循Lucene的最佳实践:
一个打开索引的编写器,分批编写文档
共享阅读器,不会关闭并在搜索中重新打开
索引搜索者的termInfosIndexDivisor设置为4,这似乎没有什么区别.我甚至尝试将它设置为像1000这样巨大的东西但没有注意到任何内存变化.
不分析不需要进行子搜索的字段(即仅完整字符串搜索),并且不存储不需要从搜索中检索回的字段.
我正在使用StandardAnalyzer索引和搜索的默认值.
如果我修剪数据并制作一个较小的索引,那么事情就可以了.当我的索引大小约为50GB时,我可以用大约600MB的RAM搜索它
但是,我确实在其中一个字段上应用了排序,但即使没有排序,内存使用对于任何搜索都是巨大的.我并不特别关心文档分数,更多的是文档存在于我的索引中,但我不确定是否忽略分数计算将有助于内存使用.
我最近从Lucene.net 2.9.4升级到Lucene.net 3.0.3,认为这可能有所帮助,但两个版本之间的内存使用情况大致相同.
坦率地说,我不确定这个索引对于一台机器来说是否太大而无法进行搜索.我发现的大多数例子都是关于20-30GB或更小的索引,所以也许这是不可能的,但我想至少问一下.
如果有人对我能做什么做任何建议,使这个可用,这将是伟大的.如果可能的话,我愿意牺牲搜索速度来使用内存.
| 归档时间: |
|
| 查看次数: |
1822 次 |
| 最近记录: |