0

I have a problem with Solr in Java. I wanted to write the queries programmatically.

I use Solr, Lucene and SolrJ in version 8.3.1

This is an example how I wanted to do it.

QueryBuilder queryBuilder = new QueryBuilder(new WhitespaceAnalyzer());
BooleanQuery booleanQuery = new BooleanQuery.Builder()
                .add(queryBuilder.createBooleanQuery("testField1", "foobar"), BooleanClause.Occur.SHOULD)
                .add(queryBuilder.createBooleanQuery("testField2", "barfoo"), BooleanClause.Occur.SHOULD)
                .add(queryBuilder.createMinShouldMatchQuery("minField", "foobar2", 0.5f), BooleanClause.Occur.SHOULD)
                .add(new TermRangeQuery("testField", new BytesRef("lower"), new BytesRef("upper"), true, true), BooleanClause.Occur.SHOULD)
                .add(queryBuilder.createBooleanQuery("empty", "fooBarEmpty"), BooleanClause.Occur.SHOULD)
                .build();

In Solr there are some queries like "... OR ...". What I want to know how I can write these "OR" queries programmatically. I searched a lot on google but found nothing. Maybe some of you guys know what I want to do and you can help me.

Cheers, Jerry

  • Can you specify your solr and solrj versions? – raghu777 Mar 11 '20 at 10:40
  • I added the versions I use. Its the same version for both. SolrJ and Solr. – Jeerrryyyy Mar 11 '20 at 11:01
  • There is no QueryBuilder in solrj. https://stackoverflow.com/a/42441282/2536745 I think you are using lucene-solr library. Please confirm. – raghu777 Mar 11 '20 at 11:04
  • Oh sorry. My bad. The QueryBuilder is from lucene. Also version 8.3.1. Is there a way how i can create such a "OR" query with this querybuilder or in some other way? The only thing i don't want is to write it in a plain string. – Jeerrryyyy Mar 11 '20 at 11:07

1 Answers1

0

You can create your own query as string and then add in solrj, filterquery

For example: Suppose you have to search city either abc or xyz and request like:

{ "filterQuery": {"city":["abc","xyz"] } }

So, your query like:

SolrQuery query = new SolrQuery();
if (req.getFilterQuery() != null && !req.getFilterQuery().isEmpty()) {
    
    final StringBuilder chars = new StringBuilder();
    for (String key : req.getFilterQuery().keySet()) {
    
        chars.append(key + ":" + "(");
        for (String val : req.getFilterQuery().get(key)) {
    
            chars.append("\"" + val + "\"" + " ");
        }
        chars.append(")");
        chars.append(" OR ");
    
    }
    
    chars.delete(chars.length() - 4, chars.length());
    query.addFilterQuery(chars.toString());
    
}
    
QueryResponse response = solrClient.query(query, METHOD.POST);

Hope This Help you to find your data.

turivishal
  • 34,368
  • 7
  • 36
  • 59
Mansi Joshi
  • 220
  • 5
  • 16