SourceForge.net Logo
Main Overview Wiki Issues Forum Build Fisheye
Issue Details (XML | Word | Printable)

Key: CMP-483
Type: Bug Bug
Status: Closed Closed
Resolution: Fixed
Priority: Major Major
Assignee: Shay Banon
Reporter: Hitesh Dhingra
Votes: 0
Watchers: 1
Operations

If you were logged in you would be able to see more operations.
Compass

Null Pointer Exception when wild card '*' is used at the end of query query with CompassMultiPropertyQueryStringBuilder

Created: 13/Nov/07 02:22 AM   Updated: 31/Mar/08 01:22 PM
Component/s: Compass::Core
Affects Version/s: 1.2 M2
Fix Version/s: 2.0 M1


 Description  « Hide
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.



 All   Comments   Change History      Sort Order: Ascending order - Click to sort in descending order
Maurice Nicholson added a comment - 31/Mar/08 01:04 PM
With 2.0.0M3 I get a different error:

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*");
}
}


Shay Banon added a comment - 31/Mar/08 01:22 PM
Yea, I fixed it in 2.0 RC1 trunk.