Skip to content

Instantly share code, notes, and snippets.

@maephisto
Last active November 24, 2016 12:56
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save maephisto/8433217 to your computer and use it in GitHub Desktop.
Save maephisto/8433217 to your computer and use it in GitHub Desktop.
Simple Payload Query Parser (Solr/Lucene)
import org.apache.commons.lang.StringUtils;
import org.apache.lucene.index.Term;
import org.apache.lucene.search.BooleanQuery;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.BooleanClause.Occur;
import org.apache.lucene.search.payloads.AveragePayloadFunction;
import org.apache.lucene.search.payloads.PayloadTermQuery;
import org.apache.solr.common.params.SolrParams;
import org.apache.solr.common.util.NamedList;
import org.apache.solr.request.SolrQueryRequest;
import org.apache.solr.search.QParser;
import org.apache.solr.search.QParserPlugin;
import org.apache.solr.search.SyntaxError;
/**
* Parser plugin to parse payload queries.
*/
public class PayloadQParserPlugin extends QParserPlugin {
@Override
public QParser createParser(String qstr, SolrParams localParams,
SolrParams params, SolrQueryRequest req) {
return new PayloadQParser(qstr, localParams, params, req);
}
@Override
public void init(NamedList args) {
}
}
class PayloadQParser extends QParser {
public PayloadQParser(String qstr, SolrParams localParams, SolrParams params,
SolrQueryRequest req) {
super(qstr, localParams, params, req);
}
@Override
public Query parse() throws SyntaxError {
BooleanQuery q = new BooleanQuery();
String[] nvps = StringUtils.split(qstr, " ");
for (int i = 0; i < nvps.length; i++) {
String[] nv = StringUtils.split(nvps[i], ":");
if (nv[0].startsWith("+")) {
q.add(new PayloadTermQuery(new Term(nv[0].substring(1), nv[1]),
new AveragePayloadFunction(), false), Occur.MUST);
} else {
q.add(new PayloadTermQuery(new Term(nv[0], nv[1]),
new AveragePayloadFunction(), false), Occur.SHOULD);
}
}
return q;
}
}
@nice2mu
Copy link

nice2mu commented Nov 24, 2016

it work for solr6.3 ?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment