Subversion Repositories SmartDukaan

Rev

Rev 20277 | 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 badly

                JsonArray 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("ids").asArray().get(0)+"/"+j.asObject().get("id").asString());
                        }
                        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.setOffset("10");
                a.getSearchResults();
                System.out.println(a.getResultJson());
        }


        public void setOffset(String offset) {
                this.offset = offset;
        }


        public String getOffset() {
                return offset;
        }

}