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
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.