模糊查询导致BooleanQuery.TooManyClauses异常的问题

grantbb 2007-12-24
当我对几千万条记录进行模糊查询的时候。
例如:new QueryParser(username,analyzer).parse(keyword+"*");
有些通用的关键字就会出现:BooleanQuery.TooManyClauses异常

查了很多资料,可以通过下面的方式解决模糊查询匹配结果太多的问题,但是这样在数据量很大的情况下,会造成OutOfMemory的异常
BooleanQuery.setMaxClauseCount(10000);

不知道谁还有没有其他办法?
javaeyes 2007-12-25
BooleanQuery.setMaxClauseCount(10000);就够了?
查询到大的索引字段上的话根本不够。lucene将这样的Query rewrite成一些单独的能匹配你这个查询的TermQuery。比如当你的索引里面有10000个以"a"开头的单词,lucene就rewrite出10000个Query。嘿嘿,这样查岂有不慢的道理?岂有不OutOfMemory的道理?
我想只有hack Lucene的rewrite,或者改变你的查询方式,才能解决这个问题吧
imjl 2008-01-02
我建议你改变你的搜索方式。

我通常就设置在1024.


太大就耗内存。这就是为什么限制它。

roki 2008-01-10
模糊查询只能用在数据量很少的情况下, 大数据量情况必须另想办法,具体情况具体分析
qwj528 2010-10-26
org.apache.lucene.search.booleanquery$tooManyClauses这个问题有好的解决方法吗?大数据量情况用什么方法比较好呢?
harbey 2010-11-12
Google和百度的搜索数也有个上限,匹配度太低了,即使搜索出来对于用户来说也是没有意义的!可以像Google或百度那样做分页吧!
harbey 2010-11-12
对搜索结果进行cache,也许对性能有一定提升
illu 2010-11-13
BooleanFilter 别用Query
Global site tag (gtag.js) - Google Analytics