Rev 20265 | Rev 20277 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
package in.shop2020.dtrapi.controllers;import in.shop2020.dtrapi.services.SolrService;import java.io.IOException;import java.net.URISyntaxException;import org.apache.log4j.Logger;import com.eclipsesource.json.Json;import com.eclipsesource.json.JsonArray;import com.eclipsesource.json.JsonObject;import com.eclipsesource.json.JsonValue;import java.io.InputStream;import java.net.URL;import org.apache.commons.io.IOUtils;import org.apache.http.client.utils.URIBuilder;public class SolrSearchController extends BaseController{private static Logger log = Logger.getLogger(Class.class);private static final long serialVersionUID = 1L;private String search_text;private String offset;private static final int max_count = 10;private static final int max_count_accesories = 5;private double max_accessory_score, max_mobile_score, max_tablet_score;private int mobile_records, tablet_records;private JsonObject result_json;private SolrService s = new SolrService();public String getSuggestions() throws URISyntaxException, IOException{try{log.info("Calling solr service (auto suggest) for search_text "+search_text);String jsonString = s.getSuggestions(search_text.trim());result_json = Json.parse(jsonString).asObject().get("grouped").asObject();setResultJson(sanatizedResults().toString());}catch(Exception e){e.printStackTrace();setResultJson(Json.array().asArray().toString());}return "index";}private JsonArray sanatizedResults(){//Need to re-write this section.This sucks badlyJsonArray output = Json.array().asArray();JsonArray temp_mobiles = getResults(3);log.info("Temp mobiles "+temp_mobiles.toString());JsonArray temp_tablets = getResults(5);log.info("Temp tablets "+temp_tablets.toString());JsonArray temp_accesories = getResults(6);log.info("Temp accessories "+temp_accesories.toString());if (max_accessory_score > max_mobile_score){for (JsonValue j : temp_accesories){output.add(j);}}int toFetch = temp_accesories.size() == 0 ? 5 : 3;int count = 1;if (max_mobile_score > max_tablet_score){for (JsonValue j : temp_mobiles){if (count > toFetch)break;output.add(j);count++;}count = 1;for (JsonValue j : temp_tablets){if (count > toFetch)break;output.add(j);count++;}}else{for (JsonValue j : temp_tablets){if (count > toFetch)break;output.add(j);count++;}count = 1;for (JsonValue j : temp_mobiles){if (count > toFetch)break;output.add(j);count++;}}if (max_accessory_score <= max_mobile_score){for (JsonValue j : temp_accesories){output.add(j);}}log.info("====================================");log.info("Final output "+output);return output;}private JsonArray getResults(int category_id){JsonArray output = new JsonArray();JsonArray suggestion;JsonArray subcat_suggestion;int count = 0;switch(category_id){case 3:suggestion= result_json.get("category_id:3").asObject().get("doclist").asObject().get("docs").asArray();mobile_records = result_json.get("category_id:3").asObject().get("doclist").asObject().get("numFound").asInt();try{max_mobile_score = result_json.get("category_id:3").asObject().get("doclist").asObject().get("maxScore").asDouble();}catch(Exception e){max_mobile_score = 0.0;}for (JsonValue item : suggestion) {if (count == max_count){break;}JsonObject temp = Json.object().add("subCategoryId",item.asObject().get("subCategoryId").asInt()).add("category_id",item.asObject().get("category_id").asInt()).add("title",item.asObject().get("title").asString()).add("category",item.asObject().get("category").asString());output.add(temp);count++;}case 5:suggestion = result_json.get("category_id:5").asObject().get("doclist").asObject().get("docs").asArray();tablet_records = result_json.get("category_id:5").asObject().get("doclist").asObject().get("numFound").asInt();try{max_tablet_score = result_json.get("category_id:5").asObject().get("doclist").asObject().get("maxScore").asDouble();}catch(Exception e){max_tablet_score = 0.0;}for (JsonValue item : suggestion) {if (count == max_count){break;}JsonObject temp = Json.object().add("subCategoryId",item.asObject().get("subCategoryId").asInt()).add("category_id",item.asObject().get("category_id").asInt()).add("title",item.asObject().get("title").asString()).add("category",item.asObject().get("category").asString());output.add(temp);count++;}case 6:subcat_suggestion = result_json.get("subCategoryId").asObject().get("groups").asArray();max_accessory_score = 0.0;for (JsonValue itemList : subcat_suggestion) {if (itemList.asObject().get("groupValue").asInt()==0){continue;}suggestion = itemList.asObject().get("doclist").asObject().get("docs").asArray();try{max_accessory_score = max_accessory_score < itemList.asObject().get("doclist").asObject().get("maxScore").asDouble() ? itemList.asObject().get("doclist").asObject().get("maxScore").asDouble() : max_accessory_score;}catch(Exception e){;}count = 0;for (JsonValue item : suggestion) {if (count == max_count_accesories){break;}JsonObject temp = Json.object().add("subCategoryId",item.asObject().get("subCategoryId").asInt()).add("category_id",item.asObject().get("category_id").asInt()).add("title",item.asObject().get("title").asString()).add("category",item.asObject().getString("subCategory", "Accessories"));output.add(temp);count++;}}}return output;}public String getSearchResults(){try{log.info("Calling solr service (search results) for search_text "+search_text);String jsonString = s.getSearchResults(search_text.trim(), offset);JsonArray result_json = Json.parse(jsonString).asObject().get("response").asObject().get("docs").asArray();for (JsonValue j : result_json ){j.asObject().add("productUrl", j.asObject().get("id").asString()+"/"+j.asObject().get("skuBundleId").asInt());}setResultJson(result_json.toString());}catch(Exception e){e.printStackTrace();setResultJson(Json.array().asArray().toString());}return "index";}public void setSearch_text(String search_text) {log.info("Search text "+search_text);this.search_text = search_text;}public String getSearch_text() {return search_text;}public static void main(String[] args) throws URISyntaxException, IOException{SolrSearchController a = new SolrSearchController();a.setSearch_text("iphone tempered");a.getSuggestions();System.out.println(a.getResultJson());}public void setOffset(String offset) {this.offset = offset;}public String getOffset() {return offset;}}