我有一个应用程序做前缀搜索一段时间.最近索引规模增加了,结果发现一些前缀太多了,无法让lucene处理.它一直给我一个Too Many Clauses错误,这非常令人沮丧,因为我一直在查看我的JAR并确认所包含的代码都没有实际使用布尔查询.
为什么不抛出像Too Many Hits例外的东西?为什么增加布尔查询的静态max子句整数实际上会使这个错误消失,当我肯定只使用前缀查询?查询是如何运行的,我不理解; 是他们秘密成为布尔查询?
我以前打过这个.这与事实有关,当你调用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