使用Lucene:如果我进行前缀搜索,为什么会出现Too Many Clauses错误?

dla*_*lin 8 lucene exception

我有一个应用程序做前缀搜索一段时间.最近索引规模增加了,结果发现一些前缀太多了,无法让lucene处理.它一直给我一个Too Many Clauses错误,这非常令人沮丧,因为我一直在查看我的JAR并确认所包含的代码都没有实际使用布尔查询.

为什么不抛出像Too Many Hits例外的东西?为什么增加布尔查询的静态max子句整数实际上会使这个错误消失,当我肯定只使用前缀查询?查询是如何运行的,我不理解; 是他们秘密成为布尔查询?

Rya*_*arn 5

我以前打过这个.这与事实有关,当你调用Query.rewrite()时,lucene在封面下将许多(所有?)事物转换为布尔查询

来自:http://lucene.apache.org/java/2_2_0/api/org/apache/lucene/search/Query.html#rewrite(org.apache.lucene.index.IndexReader)

public Query rewrite(IndexReader reader)
              throws IOException

    Expert: called to re-write queries into primitive queries.
            For example, a PrefixQuery will be rewritten into a
            BooleanQuery that consists of TermQuerys.

    Throws:
        IOException
Run Code Online (Sandbox Code Playgroud)