Subversion Repositories SmartDukaan

Rev

Rev 20197 | Rev 20209 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

package in.shop2020.dtrapi.controllers;


import java.io.IOException;
import java.io.InputStream;
import java.net.URISyntaxException;
import java.net.URL;

import org.apache.commons.io.IOUtils;
import org.apache.http.client.utils.URIBuilder;
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;



public class AutoSuggestController extends BaseController{
        private static Logger log = Logger.getLogger(Class.class);

        private static final long serialVersionUID = 1L;

        //:8983/solr/collection1/select?q=*apple%20iphone%205s*&fl=title,subCategoryId,category_id&wt=json&group=true&group.query=category_id:3&group.query=category_id:5&group.field=subCategoryId&group.limit=10

        private String search_text;

        public String index() throws URISyntaxException, IOException{
                JsonArray outputJson = Json.array().asArray();
                URIBuilder b = new URIBuilder("http://192.168.194.109:8983/solr/collection1/select");
                //suggest:(apple iphone 5s silver)
                b.addParameter("q", "suggest:("+search_text+")");
                b.addParameter("fl", "title,subCategoryId,category_id,category,subCategory");
                b.addParameter("wt", "json");
                b.addParameter("group", "true");
                b.addParameter("group.query", "category_id:3");
                b.addParameter("group.query", "category_id:5");
                b.addParameter("group.field", "subCategoryId");
                b.addParameter("group.limit", "10");


                URL url = b.build().toURL();

                System.out.println(url.toString());
                InputStream is = url.openStream();
                String jsonString;
                try{
                        jsonString = IOUtils.toString(is, "UTF-8");
                }
                finally{
                        is.close();
                }
                JsonObject value = Json.parse(jsonString).asObject().get("grouped").asObject();

                //Lets check mobile segment

                int m = value.get("category_id:3").asObject().get("doclist").asObject().get("numFound").asInt();

                int toFetch = Math.min(m, 5);

                JsonArray mobile_suggestion = value.get("category_id:3").asObject().get("doclist").asObject().get("docs").asArray();

                int count = 0;
                for (JsonValue item : mobile_suggestion) {
                        if (count == toFetch){
                                break;
                        }
                        JsonObject temp = Json.object().add("subCategoryId",item.asObject().get("subCategoryId").asInt()).add("category_id",item.asObject().get("category_id").asInt()).add("suggestion",item.asObject().get("title").asString()).add("category_name",item.asObject().get("category").asString());
                        outputJson.add(temp);
                        count++;
                }

                m = value.get("category_id:5").asObject().get("doclist").asObject().get("numFound").asInt();

                toFetch = Math.min(m, 5);

                JsonArray tablet_suggestion = value.get("category_id:5").asObject().get("doclist").asObject().get("docs").asArray();

                count = 0;
                for (JsonValue item : tablet_suggestion) {
                        if (count == toFetch){
                                break;
                        }
                        JsonObject temp = Json.object().add("subCategoryId",item.asObject().get("subCategoryId").asInt()).add("category_id",item.asObject().get("category_id").asInt()).add("suggestion",item.asObject().get("title").asString()).add("category_name",item.asObject().get("category").asString());
                        outputJson.add(temp);
                        count++;
                }

                JsonArray subcat_suggestion = value.get("subCategoryId").asObject().get("groups").asArray();
                for (JsonValue itemList : subcat_suggestion) {
                        if (itemList.asObject().get("groupValue").asInt()==0){
                                continue;
                        }
                        m = itemList.asObject().get("doclist").asObject().get("numFound").asInt();
                        toFetch = Math.min(m, 5);
                        JsonArray suggestion = itemList.asObject().get("doclist").asObject().get("docs").asArray();
                        count = 0;
                        for (JsonValue item : suggestion) {
                                if (count == toFetch){
                                        break;
                                }
                                JsonObject temp = Json.object().add("subCategoryId",item.asObject().get("subCategoryId").asInt()).add("category_id",item.asObject().get("category_id").asInt()).add("suggestion",item.asObject().get("title").asString()).add("category_name",item.asObject().getString("subCategory", "Accessories"));
                                outputJson.add(temp);
                                count++;
                        }

                }

                setResultJson(outputJson.toString());
                return "index";
        }


        public void setSearch_text(String search_text) {
                this.search_text = search_text;
        }


        public String getSearch_text() {
                return search_text;
        }

        public static void main(String[] args) throws URISyntaxException, IOException{
                AutoSuggestController a =  new AutoSuggestController();
                a.setSearch_text("iphone");
                a.index();
                System.out.println(a.getResultJson());
        }

}