in opennlp-similarity/src/main/java/opennlp/tools/similarity/apps/solr/SearchResultsReRankerRequestHandler.java [48:148]
public void handleRequestBody(SolrQueryRequest req, SolrQueryResponse rsp){
// get query string
String requestExpression = req.getParamString();
String[] exprParts = requestExpression.split("&");
for(String part: exprParts){
if (part.startsWith("q="))
requestExpression = part;
}
String query = StringUtils.substringAfter(requestExpression, ":");
LOG.info(requestExpression);
SolrParams ps = req.getOriginalParams();
Iterator<String> iter = ps.getParameterNamesIterator();
List<String> keys = new ArrayList<>();
while(iter.hasNext()){
keys.add(iter.next());
}
List<HitBase> searchResults = new ArrayList<>();
for (int i = 0; i< MAX_SEARCH_RESULTS; i++){
String title = req.getParams().get("t"+i);
String descr = req.getParams().get("d"+i);
if(title==null || descr==null)
continue;
HitBase hit = new HitBase();
hit.setTitle(title);
hit.setAbstractText(descr);
hit.setSource(Integer.toString(i));
searchResults.add(hit);
}
/*
* http://173.255.254.250:8983/solr/collection1/reranker/?
* q=search_keywords:design+iphone+cases&fields=spend+a+day+with+a+custom+iPhone+case&fields=Add+style+to+your+every+day+fresh+design+with+a+custom+iPhone+case&fields=Add+style+to+your+every+day+with+mobile+case+for+your+family&fields=Add+style+to+your+iPhone+and+iPad&fields=Add+Apple+fashion+to+your+iPhone+and+iPad
*
*/
if (searchResults.size()<1) {
int count=0;
for(String val : exprParts){
if (val.startsWith("fields=")){
val = StringUtils.mid(val, 7, val.length());
HitBase hit = new HitBase();
hit.setTitle("");
hit.setAbstractText(val);
hit.setSource(Integer.toString(count));
searchResults.add(hit);
count++;
}
}
}
List<HitBase> reRankedResults;
query = query.replace('+', ' ');
if (tooFewKeywords(query)|| orQuery(query)){
reRankedResults = searchResults;
LOG.info("No re-ranking for "+query);
}
else
reRankedResults = calculateMatchScoreResortHits(searchResults, query);
/*
* <scores>
<score index="2">3.0005</score>
<score index="1">2.101</score>
<score index="3">2.1003333333333334</score>
<score index="4">2.00025</score>
<score index="5">1.1002</score>
</scores>
*/
StringBuilder buf = new StringBuilder();
buf.append("<scores>");
for(HitBase hit: reRankedResults){
buf.append("<score index=\"").append(hit.getSource()).append("\">").append(hit.getGenerWithQueryScore()).append("</score>");
}
buf.append("</scores>");
NamedList<Object> scoreNum = new NamedList<>();
for(HitBase hit: reRankedResults){
scoreNum.add(hit.getSource(), hit.getGenerWithQueryScore());
}
StringBuilder bufNums = new StringBuilder();
bufNums.append("order>");
for(HitBase hit: reRankedResults){
bufNums.append(hit.getSource()).append("_");
}
bufNums.append("/order>");
LOG.info("re-ranking results: "+ buf);
NamedList<Object> values = rsp.getValues();
values.remove("response");
values.add("response", scoreNum);
//values.add("new_order", bufNums.toString().trim());
rsp.setAllValues(values);
}