Subversion Repositories SmartDukaan

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
20186 kshitij.so 1
package in.shop2020.dtrapi.controllers;
2
 
3
 
20209 kshitij.so 4
import in.shop2020.dtrapi.services.SolrService;
20186 kshitij.so 5
import java.io.IOException;
6
import java.io.InputStream;
7
import java.net.URISyntaxException;
8
import java.net.URL;
9
 
10
import org.apache.commons.io.IOUtils;
11
import org.apache.http.client.utils.URIBuilder;
12
import org.apache.log4j.Logger;
13
 
14
import com.eclipsesource.json.Json;
15
import com.eclipsesource.json.JsonArray;
16
import com.eclipsesource.json.JsonObject;
17
import com.eclipsesource.json.JsonValue;
18
 
19
 
20
 
20190 kshitij.so 21
public class AutoSuggestController extends BaseController{
20186 kshitij.so 22
	private static Logger log = Logger.getLogger(Class.class);
23
 
24
	private static final long serialVersionUID = 1L;
20209 kshitij.so 25
	private String search_text;
26
	private JsonObject result_json;
27
	private static final int max_count = 10;
28
	private static final int max_count_accesories = 5;
29
	private double max_accessory_score, max_mobile_score, max_tablet_score;
30
	private int mobile_records, tablet_records;
31
	private SolrService s =  new SolrService();
20193 kshitij.so 32
 
20186 kshitij.so 33
 
34
	public String index() throws URISyntaxException, IOException{
35
		try{
20209 kshitij.so 36
		String jsonString = s.getSuggestions(search_text.trim());
37
		result_json = Json.parse(jsonString).asObject().get("grouped").asObject();
38
		setResultJson(sanatizedResults().toString());
20186 kshitij.so 39
		}
20209 kshitij.so 40
		catch(Exception e){
41
			e.printStackTrace();
42
			setResultJson(Json.array().asArray().toString());
20186 kshitij.so 43
		}
20209 kshitij.so 44
		return "index";
45
	}
20193 kshitij.so 46
 
20209 kshitij.so 47
	private JsonArray sanatizedResults(){
20193 kshitij.so 48
 
20209 kshitij.so 49
		//Need to re-write this section.This sucks badly
20193 kshitij.so 50
 
20209 kshitij.so 51
		JsonArray output = Json.array().asArray();
52
		JsonArray temp_mobiles = getResults(3);
53
		log.info("Temp mobiles "+temp_mobiles.toString());
54
		JsonArray temp_tablets = getResults(5);
55
		log.info("Temp tablets "+temp_tablets.toString());
56
		JsonArray temp_accesories = getResults(6);
57
		log.info("Temp accessories "+temp_accesories.toString());
20193 kshitij.so 58
 
20209 kshitij.so 59
		if (max_accessory_score > max_mobile_score){
60
			for (JsonValue j : temp_accesories){
61
				output.add(j);
62
			}
63
		}
20193 kshitij.so 64
 
20209 kshitij.so 65
		int toFetch = temp_accesories.size() == 0 ? 10 : 5;
20186 kshitij.so 66
		int count = 0;
20209 kshitij.so 67
		for (JsonValue j : temp_mobiles){
68
			if (count > toFetch)
20186 kshitij.so 69
				break;
20209 kshitij.so 70
			output.add(j);
20186 kshitij.so 71
			count++;
72
		}
73
		count = 0;
20209 kshitij.so 74
		for (JsonValue j : temp_tablets){
75
			if (count > toFetch)
20186 kshitij.so 76
				break;
20209 kshitij.so 77
			output.add(j);
20186 kshitij.so 78
			count++;
79
		}
20193 kshitij.so 80
 
20209 kshitij.so 81
		if (max_accessory_score <= max_mobile_score){
82
			for (JsonValue j : temp_accesories){
83
				output.add(j);
20186 kshitij.so 84
			}
20209 kshitij.so 85
		}
86
 
87
		log.info("====================================");
88
		log.info("Final output "+output);
89
 
90
		return output;
91
	}
92
 
93
	private JsonArray getResults(int category_id){
94
 
95
		JsonArray output = new JsonArray();
96
		JsonArray suggestion;
97
		JsonArray subcat_suggestion;
98
		int count = 0;
99
 
100
		switch(category_id){
101
		case 3:
102
			suggestion= result_json.get("category_id:3").asObject().get("doclist").asObject().get("docs").asArray();
103
			mobile_records = result_json.get("category_id:3").asObject().get("doclist").asObject().get("numFound").asInt();
104
			try{
105
				max_mobile_score = result_json.get("category_id:3").asObject().get("doclist").asObject().get("maxScore").asDouble();
106
			}
107
			catch(Exception e){
108
				max_mobile_score = 0.0;
109
			}
20186 kshitij.so 110
			for (JsonValue item : suggestion) {
20209 kshitij.so 111
				if (count == max_count){
20186 kshitij.so 112
					break;
113
				}
20209 kshitij.so 114
				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());
115
				output.add(temp);
20186 kshitij.so 116
				count++;
117
			}
20209 kshitij.so 118
		case 5:
119
			suggestion = result_json.get("category_id:5").asObject().get("doclist").asObject().get("docs").asArray();
120
			tablet_records = result_json.get("category_id:5").asObject().get("doclist").asObject().get("numFound").asInt();
121
			try{
122
				max_tablet_score = result_json.get("category_id:3").asObject().get("doclist").asObject().get("maxScore").asDouble();
123
			}
124
			catch(Exception e){
125
				max_tablet_score = 0.0;
126
			}
127
			for (JsonValue item : suggestion) {
128
				if (count == max_count){
129
					break;
130
				}
131
				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());
132
				output.add(temp);
133
				count++;
134
			}
135
		case 6:
136
			subcat_suggestion = result_json.get("subCategoryId").asObject().get("groups").asArray();
137
			max_accessory_score = 0.0;
138
			for (JsonValue itemList : subcat_suggestion) {
139
				if (itemList.asObject().get("groupValue").asInt()==0){
140
					continue;
141
				}
142
				suggestion = itemList.asObject().get("doclist").asObject().get("docs").asArray();
143
				try{
144
					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;
145
				}
146
				catch(Exception e){
147
					;
148
				}
149
				count = 0;
150
				for (JsonValue item : suggestion) {
151
					if (count == max_count_accesories){
152
						break;
153
					}
154
					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"));
155
					output.add(temp);
156
					count++;
157
				}
158
			}
20186 kshitij.so 159
		}
20209 kshitij.so 160
		return output;
20186 kshitij.so 161
	}
162
 
163
 
164
	public void setSearch_text(String search_text) {
165
		this.search_text = search_text;
166
	}
167
 
168
 
169
	public String getSearch_text() {
170
		return search_text;
171
	}
20193 kshitij.so 172
 
20209 kshitij.so 173
	public void setResult_json(JsonObject result_json) {
174
		this.result_json = result_json;
175
	}
176
 
177
	public JsonObject getResult_json() {
178
		return result_json;
179
	}
180
 
20186 kshitij.so 181
	public static void main(String[] args) throws URISyntaxException, IOException{
20191 kshitij.so 182
		AutoSuggestController a =  new AutoSuggestController();
20209 kshitij.so 183
		a.setSearch_text("iphone tempered");
20186 kshitij.so 184
		a.index();
185
		System.out.println(a.getResultJson());
186
	}
20193 kshitij.so 187
 
20186 kshitij.so 188
}