`
grantbb
  • 浏览: 272423 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

BooleanQuery$TooManyClauses的问题

阅读更多
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的异常
所以需要非常谨慎处理。
分享到:
评论
1 楼 caocao 2007-06-22  
遇到TooManyClauses一般应从设计角度切入,绝大部分是设计问题。比如rangequery精度太高导致clauses迅速膨胀。

相关推荐

    Lucene 搜索方法(布尔搜索)

    `BooleanQuery`允许我们构造复杂的查询表达式,其中每个查询条件被称为子查询,每个子查询都有一个关联的布尔运算符(AND, OR, NOT, SHOULD等)。下面是一些关键概念: 1. **AND运算符**: 当使用AND时,Lucene将...

    Lucene3.0之查询类型详解

    BooleanQuery booleanQuery = new BooleanQuery(); booleanQuery.add(query1, BooleanClause.Occur.MUST); // AND操作 booleanQuery.add(query2, BooleanClause.Occur.MUST); // 另一个AND操作 ``` 以上就是Lucene...

    Lucene 索引的简单使用

    **正文** Lucene,作为Apache软件基金会的一个开源项目,是Java平台上的全文检索库,它提供了文本检索的核心工具,使得开发者能够快速地在应用程序中实现高级的搜索功能。本篇文章将详细阐述如何使用Lucene来创建和...

    使用Lucene.net进行全文搜索

    var booleanQuery = new BooleanQuery(); booleanQuery.Add(new TermQuery(new Term("content", "苹果")), Occur.MUST); booleanQuery.Add(new TermQuery(new Term("content", "iPhone")), Occur.MUST); ``` ### 3....

    lucene第一天完整代码

    @Test ... BooleanQuery booleanQuery = new BooleanQuery(); Query query1 = new TermQuery(new Term("fileName","apache")); Query query2 = new TermQuery(new Term("fileName","lucene"));

    lucene部分常用代码

    booleanquery query = new BooleanQuery(); query.add(query1, BooleanClause.Occur.MUST); query.add(query2, BooleanClause.Occur.MUST); indexsearcher searcher = new IndexSearcher(reader); hits hits = ...

    Lucene查询语法

    BooleanQuery bquery1 = new BooleanQuery(); bquery1.add(query1, BooleanClause.Occur.MUST); bquery1.add(query2, BooleanClause.Occur.MUST); ``` `BooleanClause.Occur.MUST`表示两个条件都必须满足。 ###### ...

    使用Lucene实现一个简单的布尔搜索功能

    BooleanQuery booleanQuery = new BooleanQuery(); // 添加搜索子句,例如:查找包含"钢铁是怎样炼成的"的文档 TermQuery termQuery1 = new TermQuery(new Term("bookname", "钢铁是怎样炼成的")); ...

    Lucene3总体图_建索引_查询_数据库索引[参考].pdf

    - 专门处理国际化问题,确保在不同语言环境下正常工作。 **建立索引的基本步骤**: 1. 创建Directory对象,指定索引文件的存储位置,如FSDirectory实例。 2. 初始化IndexWriter对象,传入Directory对象、Analyzer...

    lucene-4.6.0官方文档

    这个文档集成了Lucene的核心概念、API使用、最佳实践以及常见问题解答,对于开发者来说是理解和掌握Lucene不可或缺的学习材料。 1. **Lucene基础** Lucene的核心功能包括文本分析、索引构建、搜索和结果排序。文本...

    搜索引擎开发现实文档(lucene)

    1. 数据检索的问题:原始方式实现搜索功能存在数据库压力和速度慢的问题,需要使用更好的解决方案来分担数据库的压力。 2. 全文数据:非结构化数据又一种叫法叫全文数据,数据库适合结构化数据的精确查询,而不适合...

    lucene数据库实例

    在实际项目中,Lucene常被用来增强Web应用的搜索功能,比如在电商网站中搜索商品,或是在知识问答平台中查找问题答案。通过对Lucene的深入理解和熟练使用,开发者可以构建出响应快速、效果优秀的搜索系统。 总结,...

    lucene高级智能查询小案例

    例如,我们可以使用TermQuery来查找特定关键词,使用BooleanQuery组合多个条件,或者使用WildcardQuery进行通配符查询。在高级查询中,我们可能会利用FuzzyQuery进行模糊匹配,或者使用PrefixQuery进行前缀搜索,...

    lunces入门资料

    如常见的TermQuery就是将一个简单的关键字进行封装后的对象,类似的还有BooleanQuery,即布尔型的查找。 IndexSearcher对象的search方法中总是需要一个Query对象(或是Query子类的对象),本节就来介绍各种Query类...

    lucene5 源码教程

    在Lucene 5中,支持多种查询类型,如TermQuery、PhraseQuery、BooleanQuery等,以及复杂的组合查询。同时,通过合理设置索引字段,如使用ngram索引、倒排索引等,可以显著提升搜索速度。 六、性能调优 Lucene提供了...

    Lucene+3.0+原理与代码分析完整版

    5. **TooManyClause 异常**:当查询包含过多的子查询时,Lucene 会抛出 TooManyClauses 异常,以防止内存溢出等问题。 6. **Lucene 的事务性**:Lucene 不直接支持事务,但在设计上支持高并发环境下的安全操作,...

    lucene核心资源包以及lucene的api

    **Lucene核心资源包与API详解** ...同时,CHM文档可以帮助开发者深入理解各个API的用法,解决开发过程中遇到的问题。通过不断实践和查阅文档,可以熟练掌握Lucene,从而构建出高效、精准的全文检索系统。

    Lucene7.4位置相关性计算源代码思路.xmind

    Lucene7.4检索和打分过程的源代码阅读思路,这里只针对用BooleanQuery作为Query,从IndexSearch说起,从检索到打分的过程,还加入了自己的无关的一些想法,忽略即可。

    lucene in action源码2

    《Lucene in Action》是关于Apache Lucene搜索引擎库的一本经典著作,这本书深入浅出地讲解了Lucene的原理和应用。...通过细致研究源码,我们不仅可以解决具体的技术问题,还能培养出更强的解决问题和创新能力。

    LuceneInAction源码

    源码里,你可以看到`FuzzyQuery`、`PhraseQuery`和`BooleanQuery`的具体实现,以及`Similarity`接口如何定义评分策略。 5. **更新与删除**: Lucene支持动态索引,允许在不重建整个索引的情况下进行文档添加、删除...

Global site tag (gtag.js) - Google Analytics