希望你们都做得很好。我有一个关于提高Lucene索引的搜索性能的问题,该索引在我的本地文件系统中大小约为6GB。
使用最终映射到MMapDirectory的Lucene FSDirectory,我可以在大约20秒内执行大约100次搜索,这对我的用例来说有点慢。使用RAMDirectory,速度要慢得多,在大约4分钟内执行大约100次搜索。
一些背景(用例): 我想将给定的地址字符串与3亿条目中最接近的匹配地址字符串相匹配。我只是在Lucene中索引3亿个条目(不存储它们),然后存储Long值来识别3亿个条目中的每一个(并且通过不存储所有3亿个地址来节省空间)。
实现: 我正在使用标准分析器来编写和搜索索引。搜索索引时,我只检索每个查询的最高匹配,然后从文档中检索Long值以识别地址。
研究: 我查看了https://wiki.apache.org/lucene-java/ImproveSearchingSpeed提出的建议。
由于我有一台Mac,我尝试使用带有多个轻量级线程的NIOFSDirectory(特别是用Java编写的Quasar光纤,但我也尝试过标准的Java线程),使用相同的IndexSearcher实例(如链接上面),但性能没有改善。注意:使用Quasar,我通常得到的警告是线程/光纤“正在占用CPU或阻塞线程”。我希望使用NIOFSDirectory和位置读取“允许多个线程从同一个文件中读取”(https://lucene.apache.org/core/5_2_0/core/org/apache/lucene/store/NIOFSDirectory.html),这将有助于提高性能。
很抱歉这篇长篇文章,如果您有任何其他信息需要我提供,请告知我们。对当前问题或替代开源解决方案的任何见解都会有所帮助。
感谢您的时间。