我有一个包含文本文件属性和文本文件主键ID的数据库 索引大约100万个文本文件及其ID(DB中的主键)。
现在,我正在两个层面进行搜索。 首先是直接数据库搜索,其中我得到主键(大约2或3百万个ID)
然后我做一个布尔查询,例如如下
+文字:“测试*”+(pkID:1 pkID:4 pkID:100 pkID:115 pkID:1041 ....)
并在我的索引文件中搜索。
问题是这样的查询(有200万个子句)花费太多时间来给出结果并且消耗过多的内存....
这个问题有优化解决方案吗?
答案 0 :(得分:2)
假设您可以重用查询的dbid部分:
只要pkid搜索可以重复使用,你就应该有很大的改进。只要您不优化索引,缓存的效果甚至应该通过提交点(我理解位集是基于每个段计算的)。
HTH
P.S。
我认为如果不注意我会认为你通过这样使用它来对你的索引进行各种滥用将是我的疏忽!
答案 1 :(得分:1)
最佳优化不是使用带有200万个子句的查询。无论您如何优化,任何包含200万个子句的Lucene查询都会运行缓慢。
在您的特定情况下,我认为首先使用+Text:"test*"
查询搜索索引更为实际,然后通过在Lucene命中运行数据库查询来限制结果。