Lucene试图从simple重写您的查询
name:l*
name:lou OR name:la OR name: ...
)-我相信这是为了更快。
作为解决方法,您可以使用
ConstantScorePrefixQuery
而不是
PrefixQuery
:
// instead of new PrefixQuery(prefix)
new ConstantScoreQuery(new PrefixFilter(prefix));
前缀搜索
如果可能的话,回退到
ConstantCorePrefixQuery
如有需要:
new PrefixQuery(prefix) {
public Query rewrite(final IndexReader reader) throws IOException {
try {
return super.rewrite(reader);
} catch (final TooManyClauses e) {
log.debug("falling back to ConstantScoreQuery for prefix " + prefix + " (" + e + ")");
final Query q = new ConstantScoreQuery(new PrefixFilter(prefix));
q.setBoost(getBoost());
return q;
}
}
};
(作为一种增强,可以使用某种
LRUMap
缓存以前失败的术语,以避免再次进行代价高昂的重写)
不过,我无法帮助您将其集成到Hibernate搜索中。你可能会在换了电视后问
Compass
;)