最近在处理lucne 检索 遇到如下异常 异常了org.apache.lucene.search.BooleanQuery$TooManyClauses: maxClauseCount is set to 1024
at org.apache.lucene.search.BooleanQuery.add(BooleanQuery.java:165)
at org.apache.lucene.search.BooleanQuery.add(BooleanQuery.java:156)
at org.apache.lucene.search.PrefixQuery.rewrite(PrefixQuery.java:54)
at org.apache.lucene.search.BooleanQuery.rewrite(BooleanQuery.java:361)
at org.apache.lucene.search.IndexSearcher.rewrite(IndexSearcher.java:151)
at org.apache.lucene.search.Query.weight(Query.java:94)
at org.apache.lucene.search.Hits.<init>(Hits.java:50)
at org.apache.lucene.search.Searcher.search(Searcher.java:46)
at org.apache.lucene.search.Searcher.search(Searcher.java:38)
at com.litxuf.manager.search.impl.DamingluSearchManagerImp.search2MultiEnterprise(DamingluSearchManagerImp.java:320)
at com.litxuf.action.front.MutilSearchAction.execute(MutilSearchAction.java:62)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:419)
........
源码如下: public Map search2MultiEnterprise(String[] key,String path)
throws CorruptIndexException, IOException, ParseException {
// 将庖丁封装成符合Lucene要求的Analyzer规范
Analyzer analyzer = new PaodingAnalyzer(); BooleanQuery query = new BooleanQuery();
if (StringUtils.isNotBlank(key[0])) {// 行业查询
Term term = new Term(FinalInformation.EHYDM, key[0].toLowerCase());
Query query1 = new PrefixQuery(term);
query.add(query1, BooleanClause.Occur.MUST);
}
if (StringUtils.isNotBlank(key[1])) {// 区域查询
Term term = new Term(FinalInformation.EAREA, key[1].toLowerCase());
Query query1 = new PrefixQuery(term);
query.add(query1, BooleanClause.Occur.MUST);
} IndexSearcher searchers = new IndexSearcher(path); Hits hits = searchers.search(query);
return null; } 执行区域检索的结果预计有200万 可是一执行就抛出了上面的异常 不知是何种原因 看到网上说 是检索的词条 超过了1024 可是我的词条总共才2个 希望各位大侠能指点迷津 小弟先谢过了
at org.apache.lucene.search.BooleanQuery.add(BooleanQuery.java:165)
at org.apache.lucene.search.BooleanQuery.add(BooleanQuery.java:156)
at org.apache.lucene.search.PrefixQuery.rewrite(PrefixQuery.java:54)
at org.apache.lucene.search.BooleanQuery.rewrite(BooleanQuery.java:361)
at org.apache.lucene.search.IndexSearcher.rewrite(IndexSearcher.java:151)
at org.apache.lucene.search.Query.weight(Query.java:94)
at org.apache.lucene.search.Hits.<init>(Hits.java:50)
at org.apache.lucene.search.Searcher.search(Searcher.java:46)
at org.apache.lucene.search.Searcher.search(Searcher.java:38)
at com.litxuf.manager.search.impl.DamingluSearchManagerImp.search2MultiEnterprise(DamingluSearchManagerImp.java:320)
at com.litxuf.action.front.MutilSearchAction.execute(MutilSearchAction.java:62)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:419)
........
源码如下: public Map search2MultiEnterprise(String[] key,String path)
throws CorruptIndexException, IOException, ParseException {
// 将庖丁封装成符合Lucene要求的Analyzer规范
Analyzer analyzer = new PaodingAnalyzer(); BooleanQuery query = new BooleanQuery();
if (StringUtils.isNotBlank(key[0])) {// 行业查询
Term term = new Term(FinalInformation.EHYDM, key[0].toLowerCase());
Query query1 = new PrefixQuery(term);
query.add(query1, BooleanClause.Occur.MUST);
}
if (StringUtils.isNotBlank(key[1])) {// 区域查询
Term term = new Term(FinalInformation.EAREA, key[1].toLowerCase());
Query query1 = new PrefixQuery(term);
query.add(query1, BooleanClause.Occur.MUST);
} IndexSearcher searchers = new IndexSearcher(path); Hits hits = searchers.search(query);
return null; } 执行区域检索的结果预计有200万 可是一执行就抛出了上面的异常 不知是何种原因 看到网上说 是检索的词条 超过了1024 可是我的词条总共才2个 希望各位大侠能指点迷津 小弟先谢过了
BooleanQuery.setMaxClauseCount(10000);
来解决问题,但是这样带来的问题是会使得内存开销加大。容易出现OutOfMemory的异常
所以需要非常谨慎处理。