Lucene is trying to rewrite your query from simple name:l*to query with all terms starting with l in them (something like name:lou OR name:la OR name: ...). I believe it should be faster.
As a workaround, you can use ConstantScorePrefixQueryinstead PrefixQuery:
// instead of new PrefixQuery(prefix)
new ConstantScoreQuery(new PrefixFilter(prefix));
(, , ). ( ), , PrefixQuery, , ConstantScorePrefixQuery:
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 Search. , Compass;)