lucene-java-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Steven Schlansker <>
Subject PrefixQuery with short prefix does not match documents
Date Fri, 24 May 2013 23:06:37 GMT
Hi everyone,

I am building an autocomplete index.  The index contains both the names and a small set of
fixed types.
The intention is that type matches will always come first, followed by name matches.

I am using a PrefixQuery to do substring matching.  Confusingly, I am finding that very short
matches sometimes will return no results when combined with an additional filter.

For example, I have a document "body:german type:TYPE".  The query "+(type:TYPE) +body:ge*"
matches this document.
The query "+(type:TYPE) +body:g*" does not.  Double confusingly, it works fine in Luke --
just not when I build the query by hand.

Here is how I create the document:

Document doc = new Document();
doc.add(new Field("body", "German", TextField.TYPE_STORED));
doc.add(new Field("type", "TYPE", StringField.TYPE_STORED));

Here is how I build the query:

Query allowedTypes = new BooleanQuery();
allowedTypes.add(new TermQuery(new Term("type", "TYPE")), Occur.SHOULD);

Query prefixQuery = new PrefixQuery(new Term("body", "ge"));
prefixQuery.setRewriteMethod(new MultiTermQuery.TopTermsScoringBooleanQueryRewrite(10000));

Query mainQuery = new BooleanQuery();
mainQuery.add(allowedTypes, Occur.MUST);
mainQuery.add(prefixQuery, Occur.MUST);

Am I missing something obvious?

Steven Schlansker

To unsubscribe, e-mail:
For additional commands, e-mail:

View raw message