I am trying to simulate the following query(Lucene query builder) using Solr


 

BooleanQuery.Builder main = new BooleanQuery.Builder();

Term t1 = new Term("f1","term");
Term t2 = new Term("f1","second");
Term t3 = new Term("f1","another");

BooleanQuery.Builder q1 = new BooleanQuery.Builder();
q1.add(new FuzzyQuery(t1,2), BooleanClause.Occur.SHOULD);
q1.add(new FuzzyQuery(t2,2), BooleanClause.Occur.SHOULD);
q1.add(new FuzzyQuery(t3,2), BooleanClause.Occur.SHOULD);
q1.setMinimumNumberShouldMatch(2);

Term t4 = new Term("f1","anothert");
Term t5 = new Term("f1","anothert2");
Term t6 = new Term("f1","anothert3");

BooleanQuery.Builder q2 = new BooleanQuery.Builder();
q2.add(new FuzzyQuery(t4,2), BooleanClause.Occur.SHOULD);
q2.add(new FuzzyQuery(t5,2), BooleanClause.Occur.SHOULD);
q2.add(new FuzzyQuery(t6,2), BooleanClause.Occur.SHOULD);
q2.setMinimumNumberShouldMatch(2);


main.add(q1.build(),BooleanClause.Occur.SHOULD);
main.add(q2.build(),BooleanClause.Occur.SHOULD);
main.setMinimumNumberShouldMatch(1);

System.out.println(main.build()); // (((f1:term~2 f1:second~2
f1:another~2)~2) ((f1:anothert~2 f1:anothert2~2 f1:anothert3~2)~2))~1   -->
Invalid Solr Query

 

 

In a few words :  ( q1 OR q2 )

 

Where q1 and q2 are a set of different terms using I'd like to do a fuzzy
search but I also need a minimum of terms to match. 

 

The best I was able to create was something like this  : 

 

SolrQuery query = new SolrQuery();
query.set("fl", "term");
query.set("q", "term~1 term2~2 term3~2");
query.set("mm",2);

System.out.println(query);

 

And I was unable to find any example that would allow me to do the type of
query that I am trying to build with only one solr query. 

 

Is it possible to use the Lucene Query builder with Solr? Is there any way
to create Boolean queries with Solr? Do I need to build the query as a
String? If so , how do I set the mm parameter in a String query? 

 

Thank you

Reply via email to