模糊查询导致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
|