public void handleRequestBody()

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);
		
	}