in opennlp-similarity/src/main/java/opennlp/tools/similarity/apps/solr/IterativeQueryComponent.java [102:186]
private ResponseBuilder substituteField(ResponseBuilder rb, String newFieldName) {
SolrParams params = rb.req.getParams();
String query = params.get("q");
String currField = StringUtils.substringBetween(" "+query, " ", ":");
if ( currField !=null && newFieldName!=null)
query = query.replace(currField, newFieldName);
NamedList<Object> values = params.toNamedList();
values.remove("q");
values.add("q", query);
params = values.toSolrParams();
rb.req.setParams(params);
rb.setQueryString(query);
String defType = params.get(QueryParsing.DEFTYPE,QParserPlugin.DEFAULT_QTYPE);
// get it from the response builder to give a different component a chance
// to set it.
String queryString = rb.getQueryString();
if (queryString == null) {
// this is the normal way it's set.
queryString = params.get( CommonParams.Q );
rb.setQueryString(queryString);
}
QParser parser = null;
try {
parser = QParser.getParser(rb.getQueryString(), defType, rb.req);
} catch (Exception e) {
e.printStackTrace();
}
Query q = null;
try {
q = parser.getQuery();
} catch (Exception e) {
e.printStackTrace();
}
if (q == null) {
// normalize a null query to a query that matches nothing
q = new BooleanQuery.Builder().build();
}
rb.setQuery( q );
try {
rb.setSortSpec(parser.getSortSpec(true));
} catch (Exception e) {
e.printStackTrace();
}
rb.setQparser(parser);
/*
try {
rb.setScoreDoc(parser.getPaging());
} catch (Exception e) {
e.printStackTrace();
}
*/
String[] fqs = rb.req.getParams().getParams(CommonParams.FQ);
if (fqs!=null && fqs.length!=0) {
List<Query> filters = rb.getFilters();
if (filters==null) {
filters = new ArrayList<>(fqs.length);
}
for (String fq : fqs) {
if (fq != null && fq.trim().length()!=0) {
QParser fqp = null;
try {
fqp = QParser.getParser(fq, null, rb.req);
} catch (Exception e) {
e.printStackTrace();
}
try {
filters.add(fqp.getQuery());
} catch (Exception e) {
e.printStackTrace();
}
}
}
// only set the filters if they are not empty otherwise
// fq=&someotherParam= will trigger all docs filter for every request
// if filter cache is disabled
if (!filters.isEmpty()) {
rb.setFilters( filters );
}
}
return rb;
}