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:53)
at org.apache.lucene.search.BooleanQuery.rewrite(BooleanQuery.java:408)
at org.apache.lucene.search.IndexSearcher.rewrite(IndexSearcher.java:138)
at org.apache.lucene.search.Query.weight(Query.java:94)
at org.apache.lucene.search.Hits.<init>(Hits.java:42)
at org.apache.lucene.search.Searcher.search(Searcher.java:45)
at org.apache.lucene.search.Searcher.search(Searcher.java:37)
at com.toodou.searcher.search.PodcasterSearcher.searchPodcaster(PodcasterSearcher.java:238)
at com.toodou.searcher.search.PodcasterSearcher.doPodcasterSearch(PodcasterSearcher.java:66)
at test.com.toodou.searcher.search.PodcasterSearcherTest.testdoPodcasterSearch(PodcasterSearcherTest.java:57)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at junit.framework.TestCase.runTest(TestCase.java:154)
at junit.framework.TestCase.runBare(TestCase.java:127)
at junit.framework.TestResult$1.protect(TestResult.java:106)
at junit.framework.TestResult.runProtected(TestResult.java:124)
at junit.framework.TestResult.run(TestResult.java:109)
at junit.framework.TestCase.run(TestCase.java:118)
at org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3TestReference.java:128)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)
可以通过设置:
BooleanQuery.setMaxClauseCount(10000);
来解决问题,但是这样带来的问题是会使得内存开销加大。容易出现OutOfMemory的异常
所以需要非常谨慎处理。
分享到:
相关推荐
`BooleanQuery`允许我们构造复杂的查询表达式,其中每个查询条件被称为子查询,每个子查询都有一个关联的布尔运算符(AND, OR, NOT, SHOULD等)。下面是一些关键概念: 1. **AND运算符**: 当使用AND时,Lucene将...
BooleanQuery booleanQuery = new BooleanQuery(); booleanQuery.add(query1, BooleanClause.Occur.MUST); // AND操作 booleanQuery.add(query2, BooleanClause.Occur.MUST); // 另一个AND操作 ``` 以上就是Lucene...
**正文** Lucene,作为Apache软件基金会的一个开源项目,是Java平台上的全文检索库,它提供了文本检索的核心工具,使得开发者能够快速地在应用程序中实现高级的搜索功能。本篇文章将详细阐述如何使用Lucene来创建和...
var booleanQuery = new BooleanQuery(); booleanQuery.Add(new TermQuery(new Term("content", "苹果")), Occur.MUST); booleanQuery.Add(new TermQuery(new Term("content", "iPhone")), Occur.MUST); ``` ### 3....
@Test ... BooleanQuery booleanQuery = new BooleanQuery(); Query query1 = new TermQuery(new Term("fileName","apache")); Query query2 = new TermQuery(new Term("fileName","lucene"));
booleanquery query = new BooleanQuery(); query.add(query1, BooleanClause.Occur.MUST); query.add(query2, BooleanClause.Occur.MUST); indexsearcher searcher = new IndexSearcher(reader); hits hits = ...
BooleanQuery bquery1 = new BooleanQuery(); bquery1.add(query1, BooleanClause.Occur.MUST); bquery1.add(query2, BooleanClause.Occur.MUST); ``` `BooleanClause.Occur.MUST`表示两个条件都必须满足。 ###### ...
BooleanQuery booleanQuery = new BooleanQuery(); // 添加搜索子句,例如:查找包含"钢铁是怎样炼成的"的文档 TermQuery termQuery1 = new TermQuery(new Term("bookname", "钢铁是怎样炼成的")); ...
- 专门处理国际化问题,确保在不同语言环境下正常工作。 **建立索引的基本步骤**: 1. 创建Directory对象,指定索引文件的存储位置,如FSDirectory实例。 2. 初始化IndexWriter对象,传入Directory对象、Analyzer...
这个文档集成了Lucene的核心概念、API使用、最佳实践以及常见问题解答,对于开发者来说是理解和掌握Lucene不可或缺的学习材料。 1. **Lucene基础** Lucene的核心功能包括文本分析、索引构建、搜索和结果排序。文本...
1. 数据检索的问题:原始方式实现搜索功能存在数据库压力和速度慢的问题,需要使用更好的解决方案来分担数据库的压力。 2. 全文数据:非结构化数据又一种叫法叫全文数据,数据库适合结构化数据的精确查询,而不适合...
在实际项目中,Lucene常被用来增强Web应用的搜索功能,比如在电商网站中搜索商品,或是在知识问答平台中查找问题答案。通过对Lucene的深入理解和熟练使用,开发者可以构建出响应快速、效果优秀的搜索系统。 总结,...
例如,我们可以使用TermQuery来查找特定关键词,使用BooleanQuery组合多个条件,或者使用WildcardQuery进行通配符查询。在高级查询中,我们可能会利用FuzzyQuery进行模糊匹配,或者使用PrefixQuery进行前缀搜索,...
如常见的TermQuery就是将一个简单的关键字进行封装后的对象,类似的还有BooleanQuery,即布尔型的查找。 IndexSearcher对象的search方法中总是需要一个Query对象(或是Query子类的对象),本节就来介绍各种Query类...
在Lucene 5中,支持多种查询类型,如TermQuery、PhraseQuery、BooleanQuery等,以及复杂的组合查询。同时,通过合理设置索引字段,如使用ngram索引、倒排索引等,可以显著提升搜索速度。 六、性能调优 Lucene提供了...
5. **TooManyClause 异常**:当查询包含过多的子查询时,Lucene 会抛出 TooManyClauses 异常,以防止内存溢出等问题。 6. **Lucene 的事务性**:Lucene 不直接支持事务,但在设计上支持高并发环境下的安全操作,...
**Lucene核心资源包与API详解** ...同时,CHM文档可以帮助开发者深入理解各个API的用法,解决开发过程中遇到的问题。通过不断实践和查阅文档,可以熟练掌握Lucene,从而构建出高效、精准的全文检索系统。
Lucene7.4检索和打分过程的源代码阅读思路,这里只针对用BooleanQuery作为Query,从IndexSearch说起,从检索到打分的过程,还加入了自己的无关的一些想法,忽略即可。
《Lucene in Action》是关于Apache Lucene搜索引擎库的一本经典著作,这本书深入浅出地讲解了Lucene的原理和应用。...通过细致研究源码,我们不仅可以解决具体的技术问题,还能培养出更强的解决问题和创新能力。
源码里,你可以看到`FuzzyQuery`、`PhraseQuery`和`BooleanQuery`的具体实现,以及`Similarity`接口如何定义评分策略。 5. **更新与删除**: Lucene支持动态索引,允许在不重建整个索引的情况下进行文档添加、删除...