CompassQueryBuilder queryBuilder = compassSession.queryBuilder();
CompassMultiPropertyQueryStringBuilder mpqsBuilder= queryBuilder.multiPropertyQueryString("test*");
mpqsBuilder.add("title");
mpqsBuilder.add("desc");
CompassQuery qry=mpqsBuilder.toQuery(); <------ this line gives following exception
java.lang.NullPointerException
at org.apache.lucene.index.Term.<init>(Term.java:39)
at org.apache.lucene.index.Term.<init>(Term.java:36)
at org.compass.core.lucene.engine.queryparser.CompassMultiFieldQueryParser.getPrefixQuery(CompassMultiFieldQueryParser.java:96)
at org.apache.lucene.queryParser.QueryParser.Term(QueryParser.java:1079)
at org.apache.lucene.queryParser.QueryParser.Clause(QueryParser.java:979)
at org.apache.lucene.queryParser.QueryParser.Query(QueryParser.java:907)
at org.apache.lucene.queryParser.QueryParser.TopLevelQuery(QueryParser.java:896)
at org.apache.lucene.queryParser.QueryParser.parse(QueryParser.java:146)
at org.compass.core.lucene.engine.queryparser.DefaultLuceneQueryParser.parse(DefaultLuceneQueryParser.java:64)
at org.compass.core.lucene.engine.query.LuceneSearchEngineMultiPropertyQueryStringBuilder.toQuery(LuceneSearchEngineMultiPropertyQueryStringBuilder.java:80) at org.compass.core.impl.DefaultCompassQueryBuilder$DefaultCompassMultiPropertyQueryStringBuilder.toQuery(DefaultCompassQueryBuilder.java:214)
getPrefixQuery(String field, String termStr) in org.apache.lucene.queryParser.MultiFieldQueryParser checks for null but getPrefixQuery(String field, String termStr) in org.compass.core.lucene.engine.queryparser.CompassMultiFieldQueryParser does not.
java.lang.NullPointerException
at org.compass.core.mapping.ResourcePropertyLookup.<init>(ResourcePropertyLookup.java:32)
at org.compass.core.mapping.CompassMapping.getResourcePropertyLookup(CompassMapping.java:156)
at org.apache.lucene.queryParser.CompassMultiFieldQueryParser.getPrefixQuery(CompassMultiFieldQueryParser.java:176)
at org.apache.lucene.queryParser.QueryParser.Term(QueryParser.java:1120)
at org.apache.lucene.queryParser.QueryParser.Clause(QueryParser.java:1020)
at org.apache.lucene.queryParser.QueryParser.Query(QueryParser.java:948)
at org.apache.lucene.queryParser.QueryParser.TopLevelQuery(QueryParser.java:937)
at org.apache.lucene.queryParser.QueryParser.parse(QueryParser.java:147)
at MultiPropertyPrefixQueryTest.testMultiPropertyPrefixQueryCompass(MultiPropertyPrefixQueryTest.java:22)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:40)
The following test case reproduces it:
import junit.framework.TestCase;
import org.apache.lucene.queryParser.MultiFieldQueryParser;
import org.apache.lucene.queryParser.CompassMultiFieldQueryParser;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.search.Query;
import org.compass.core.mapping.CompassMapping;
public class MultiPropertyPrefixQueryTest extends TestCase {
public void testMultiPropertyPrefixQueryLucene() throws Exception {
MultiFieldQueryParser mfqp = new MultiFieldQueryParser(new String[] { "foo", "bar" }, new StandardAnalyzer());
Query query = mfqp.parse("descr*");
assertEquals(query.toString(), "foo:descr* bar:descr*");
}
public void testMultiPropertyPrefixQueryCompass() throws Exception {
MultiFieldQueryParser mfqp = new CompassMultiFieldQueryParser(new String[] { "foo", "bar" } }, new StandardAnalyzer(), new CompassMapping(), null, true);
Query query = mfqp.parse("descr*");
assertEquals(query.toString(), "foo:descr* bar:descr*");
}
}