1 |
25725
|
antonis.le
|
package eu.dnetlib.data.search.solr;
|
2 |
|
|
|
3 |
47316
|
katerina.i
|
import com.google.gson.Gson;
|
4 |
49870
|
katerina.i
|
import eu.dnetlib.api.data.SearchServiceException;
|
5 |
47316
|
katerina.i
|
import eu.dnetlib.data.search.transform.Transformer;
|
6 |
|
|
import eu.dnetlib.data.search.transform.TransformerException;
|
7 |
|
|
import eu.dnetlib.data.search.utils.solr.SolrResultSetOptionsUtil;
|
8 |
|
|
import eu.dnetlib.data.search.utils.solr.SolrResultsFormatter;
|
9 |
25725
|
antonis.le
|
import eu.dnetlib.domain.EPR;
|
10 |
|
|
import gr.uoa.di.driver.enabling.resultset.ResultSet;
|
11 |
56601
|
katerina.i
|
import io.micrometer.core.instrument.Timer;
|
12 |
|
|
import io.micrometer.prometheus.PrometheusMeterRegistry;
|
13 |
25786
|
antonis.le
|
import org.apache.commons.lang.StringEscapeUtils;
|
14 |
25725
|
antonis.le
|
import org.apache.log4j.Logger;
|
15 |
55643
|
katerina.i
|
import org.apache.solr.client.solrj.SolrClient;
|
16 |
25725
|
antonis.le
|
import org.apache.solr.client.solrj.SolrServerException;
|
17 |
55643
|
katerina.i
|
import org.apache.solr.client.solrj.impl.CloudSolrClient;
|
18 |
25725
|
antonis.le
|
import org.apache.solr.client.solrj.response.FacetField;
|
19 |
|
|
import org.apache.solr.client.solrj.response.QueryResponse;
|
20 |
|
|
import org.apache.solr.common.SolrDocumentList;
|
21 |
|
|
import org.apache.solr.common.params.SolrParams;
|
22 |
|
|
import org.apache.solr.common.util.NamedList;
|
23 |
|
|
import org.z3950.zing.cql.CQLParseException;
|
24 |
|
|
|
25 |
47316
|
katerina.i
|
import javax.ws.rs.core.MediaType;
|
26 |
25725
|
antonis.le
|
import java.io.IOException;
|
27 |
49850
|
katerina.i
|
import java.io.OutputStream;
|
28 |
55643
|
katerina.i
|
import java.util.*;
|
29 |
25725
|
antonis.le
|
|
30 |
|
|
/**
|
31 |
|
|
* Created by antleb on 2/4/14.
|
32 |
|
|
*/
|
33 |
56601
|
katerina.i
|
|
34 |
25725
|
antonis.le
|
public class SolrResultSet implements ResultSet<String> {
|
35 |
|
|
|
36 |
|
|
private Logger logger = Logger.getLogger(getClass());
|
37 |
|
|
|
38 |
|
|
private EPR epr = null;
|
39 |
55643
|
katerina.i
|
public SolrClient solrClient = null;
|
40 |
25725
|
antonis.le
|
|
41 |
|
|
private NamedList<String> queryOpts = new NamedList<String>();
|
42 |
47316
|
katerina.i
|
long size = -1;
|
43 |
25725
|
antonis.le
|
|
44 |
56601
|
katerina.i
|
private PrometheusMeterRegistry registry;
|
45 |
25725
|
antonis.le
|
|
46 |
56601
|
katerina.i
|
public SolrResultSet(EPR epr, CloudSolrClient cloudSolrClient, PrometheusMeterRegistry registry) throws IOException, CQLParseException {
|
47 |
55643
|
katerina.i
|
logger.debug("Setting solr client " + cloudSolrClient);
|
48 |
25725
|
antonis.le
|
this.epr = epr;
|
49 |
55643
|
katerina.i
|
this.solrClient = cloudSolrClient;
|
50 |
47316
|
katerina.i
|
this.queryOpts = SolrResultSetOptionsUtil.extractQueryOptions(epr.getParameter("query"));
|
51 |
25725
|
antonis.le
|
|
52 |
|
|
String layout = epr.getParameter("layout");
|
53 |
|
|
String mdformat = epr.getParameter("mdformat");
|
54 |
|
|
String interpretation = epr.getParameter("interpretation");
|
55 |
|
|
|
56 |
55643
|
katerina.i
|
((CloudSolrClient)solrClient).setDefaultCollection(mdformat + "-" + layout + "-" + interpretation);
|
57 |
56601
|
katerina.i
|
|
58 |
|
|
this.registry = registry;
|
59 |
25725
|
antonis.le
|
}
|
60 |
|
|
|
61 |
|
|
@Override
|
62 |
|
|
public boolean isOpen() {
|
63 |
|
|
return true;
|
64 |
|
|
}
|
65 |
|
|
|
66 |
|
|
@Override
|
67 |
|
|
public boolean isAlive() {
|
68 |
|
|
return true;
|
69 |
|
|
}
|
70 |
|
|
|
71 |
|
|
@Override
|
72 |
|
|
public void close() {
|
73 |
55643
|
katerina.i
|
/*
|
74 |
|
|
try {
|
75 |
|
|
logger.debug("!!!!!!!!! !!!!!!! CLOSING !!!!!!!!! !!!!!!!!!! ");
|
76 |
|
|
solrClient.close();
|
77 |
|
|
|
78 |
|
|
} catch (IOException e) {
|
79 |
|
|
logger.error("Error closing result set.", e);
|
80 |
|
|
}
|
81 |
|
|
*/
|
82 |
25725
|
antonis.le
|
}
|
83 |
|
|
|
84 |
|
|
@Override
|
85 |
|
|
public int size() {
|
86 |
47316
|
katerina.i
|
return (int) size;
|
87 |
|
|
}
|
88 |
25725
|
antonis.le
|
|
89 |
47316
|
katerina.i
|
@Override
|
90 |
|
|
@Deprecated
|
91 |
|
|
public List<String> getElements(int from, int to) {
|
92 |
|
|
return get(from, to);
|
93 |
25725
|
antonis.le
|
}
|
94 |
|
|
|
95 |
47316
|
katerina.i
|
List<FacetField> facetFields = null;
|
96 |
|
|
|
97 |
|
|
@Override
|
98 |
|
|
@Deprecated
|
99 |
|
|
public List<String> get(int from, int to) {
|
100 |
|
|
List<String> res = new ArrayList<String>();
|
101 |
|
|
|
102 |
33670
|
katerina.i
|
QueryResponse rsp = null;
|
103 |
47316
|
katerina.i
|
|
104 |
|
|
HashMap<String, List<String>> map = new HashMap<String, List<String>>();
|
105 |
|
|
|
106 |
|
|
logger.debug("from: " + from);
|
107 |
|
|
logger.debug("to: " + to);
|
108 |
|
|
|
109 |
|
|
|
110 |
|
|
queryOpts.add("start", from+1 + "");
|
111 |
|
|
queryOpts.add("rows", to + 1+"");
|
112 |
|
|
|
113 |
|
|
try {
|
114 |
56601
|
katerina.i
|
|
115 |
33670
|
katerina.i
|
rsp = solrClient.query(SolrParams.toSolrParams(queryOpts));
|
116 |
56601
|
katerina.i
|
|
117 |
47316
|
katerina.i
|
facetFields = rsp.getFacetFields();
|
118 |
|
|
SolrDocumentList docs = rsp.getResults();
|
119 |
33670
|
katerina.i
|
|
120 |
47316
|
katerina.i
|
if (facetFields!=null && !facetFields.isEmpty()) {
|
121 |
|
|
for (int i = from - 1; i < to; i++) {
|
122 |
|
|
for (FacetField field : facetFields) {
|
123 |
|
|
if (field.getValueCount() > i) {
|
124 |
|
|
BrowseField bf = new BrowseField();
|
125 |
|
|
bf.setId(field.getValues().get(i).getName());
|
126 |
|
|
bf.setName(field.getValues().get(i).getName());
|
127 |
|
|
bf.setCount(field.getValues().get(i).getCount() + "");
|
128 |
|
|
if (map.get(field.getName()) == null) {
|
129 |
|
|
map.put(field.getName(), new ArrayList<String>());
|
130 |
|
|
}
|
131 |
30806
|
katerina.i
|
|
132 |
47316
|
katerina.i
|
map.get(field.getName()).add(new Gson().toJson(bf));
|
133 |
|
|
}
|
134 |
|
|
}
|
135 |
|
|
}
|
136 |
25725
|
antonis.le
|
|
137 |
47316
|
katerina.i
|
for (Map.Entry<String, List<String>> facetEntry : map.entrySet()) {
|
138 |
|
|
StringBuilder builder = new StringBuilder();
|
139 |
|
|
builder.append("\"" + facetEntry.getKey() + "\"" + " : ");
|
140 |
|
|
builder.append(facetEntry.getValue());
|
141 |
|
|
res.add(builder.toString());
|
142 |
|
|
}
|
143 |
25725
|
antonis.le
|
}
|
144 |
|
|
|
145 |
47316
|
katerina.i
|
logger.debug("time: " + rsp.getElapsedTime());
|
146 |
|
|
logger.debug("found: " + docs.getNumFound());
|
147 |
|
|
logger.debug("docs: " + docs.size());
|
148 |
|
|
|
149 |
|
|
for (int i = 0; i < docs.size(); i++) {
|
150 |
55643
|
katerina.i
|
String result = (String) docs.get(i).get("__result");
|
151 |
47316
|
katerina.i
|
res.add(result);
|
152 |
|
|
}
|
153 |
|
|
|
154 |
|
|
return res;
|
155 |
|
|
|
156 |
|
|
} catch (SolrServerException sse) {
|
157 |
|
|
logger.error("Fail to get results from Solr. ", sse);
|
158 |
55643
|
katerina.i
|
|
159 |
|
|
} catch (IOException ioe) {
|
160 |
|
|
logger.error("Fail to get results from Solr. ", ioe);
|
161 |
25725
|
antonis.le
|
}
|
162 |
|
|
|
163 |
47316
|
katerina.i
|
return null;
|
164 |
25725
|
antonis.le
|
}
|
165 |
|
|
|
166 |
49850
|
katerina.i
|
@Override
|
167 |
|
|
public EPR getEpr() {
|
168 |
|
|
return null;
|
169 |
|
|
}
|
170 |
|
|
|
171 |
47316
|
katerina.i
|
public Map<String,List<String>> newGet(int from, int to, String format, Transformer transformer, Transformer oldRefineTransformer) {
|
172 |
|
|
List<String> refineSolrResults = new ArrayList<String>();
|
173 |
|
|
List<String> searchSolrResults = new ArrayList<String>();
|
174 |
25725
|
antonis.le
|
|
175 |
47316
|
katerina.i
|
QueryResponse rsp = null;
|
176 |
|
|
HashMap<String, List<String>> map = new HashMap<String, List<String>>();
|
177 |
25725
|
antonis.le
|
|
178 |
47316
|
katerina.i
|
queryOpts.add("start", from*to + "");
|
179 |
|
|
queryOpts.add("rows", to +"");
|
180 |
57207
|
katerina.i
|
//queryOpts.add("f.resulthostingdatasource.facet.limit", "2");
|
181 |
25725
|
antonis.le
|
|
182 |
56601
|
katerina.i
|
long startTime = System.nanoTime();
|
183 |
|
|
|
184 |
47316
|
katerina.i
|
try {
|
185 |
56601
|
katerina.i
|
io.micrometer.core.instrument.Timer.Sample timer = Timer.start(registry);
|
186 |
|
|
rsp = solrClient.query(SolrParams.toSolrParams(queryOpts));
|
187 |
|
|
timer.stop(registry.timer("solr.server.response.duration"));
|
188 |
55643
|
katerina.i
|
|
189 |
56601
|
katerina.i
|
|
190 |
47316
|
katerina.i
|
long estimatedTime = System.nanoTime() - startTime;
|
191 |
|
|
logger.info("Solrj time " + estimatedTime/1000000 + " milliseconds for query:" + queryOpts.get("q") +
|
192 |
|
|
" and facets " + queryOpts.getAll("facet.field") + " and fq " + queryOpts.getAll("fq") + " from: "
|
193 |
|
|
+ from + " and size " + to);
|
194 |
25725
|
antonis.le
|
|
195 |
47316
|
katerina.i
|
facetFields = rsp.getFacetFields();
|
196 |
25725
|
antonis.le
|
|
197 |
47316
|
katerina.i
|
SolrDocumentList docs = rsp.getResults();
|
198 |
25725
|
antonis.le
|
|
199 |
47316
|
katerina.i
|
this.size = docs.getNumFound();
|
200 |
25725
|
antonis.le
|
|
201 |
47316
|
katerina.i
|
if (facetFields!=null && !facetFields.isEmpty()) {
|
202 |
|
|
if (format != null && format.equals(MediaType.APPLICATION_JSON)) {
|
203 |
|
|
for (FacetField field : facetFields) {
|
204 |
|
|
map.put(field.getName(), new ArrayList<String>());
|
205 |
|
|
BrowseField bf = null;
|
206 |
|
|
for (int i = 0; i < field.getValueCount(); i++) {
|
207 |
|
|
bf = new BrowseField();
|
208 |
47770
|
katerina.i
|
//bf.setId(org.apache.commons.lang3.StringEscapeUtils.escapeJson(field.getValues().get(i).getName()));
|
209 |
|
|
bf.setId(field.getValues().get(i).getName());
|
210 |
|
|
String[] facetedValues = field.getValues().get(i).getName().split("\\|\\|",2);
|
211 |
25725
|
antonis.le
|
|
212 |
55643
|
katerina.i
|
|
213 |
|
|
logger.debug("faceted values " + Arrays.toString(facetedValues));
|
214 |
|
|
|
215 |
47316
|
katerina.i
|
if (facetedValues.length > 1) {
|
216 |
47770
|
katerina.i
|
//bf.setName(org.apache.commons.lang3.StringEscapeUtils.escapeJson(facetedValues[1]));
|
217 |
|
|
bf.setName(facetedValues[1]);
|
218 |
55643
|
katerina.i
|
logger.debug("faceted values [1] " + facetedValues[1]);
|
219 |
47316
|
katerina.i
|
|
220 |
|
|
} else if (field.getValues().get(i).getName().split("_\\:\\:",2).length > 1) {
|
221 |
47770
|
katerina.i
|
//bf.setName(org.apache.commons.lang3.StringEscapeUtils.escapeJson(field.getValues().get(i).getName().split("\\:\\:",2)[1]).replaceAll("\\:\\:", "\\|"));
|
222 |
|
|
bf.setName(field.getValues().get(i).getName().split("\\:\\:",2)[1].replaceAll("\\:\\:", "\\|"));
|
223 |
47316
|
katerina.i
|
|
224 |
|
|
} else {
|
225 |
47770
|
katerina.i
|
//bf.setName(org.apache.commons.lang3.StringEscapeUtils.escapeJson(field.getValues().get(i).getName()));
|
226 |
|
|
bf.setName(field.getValues().get(i).getName());
|
227 |
47316
|
katerina.i
|
}
|
228 |
|
|
|
229 |
|
|
bf.setCount(field.getValues().get(i).getCount() + "");
|
230 |
|
|
map.get(field.getName()).add(new Gson().toJson(bf));
|
231 |
45684
|
katerina.i
|
}
|
232 |
47316
|
katerina.i
|
|
233 |
25725
|
antonis.le
|
}
|
234 |
47316
|
katerina.i
|
|
235 |
|
|
StringBuilder builder = null;
|
236 |
|
|
|
237 |
|
|
for (Map.Entry<String, List<String>> facetEntry : map.entrySet()) {
|
238 |
|
|
builder = new StringBuilder();
|
239 |
|
|
builder.append("\"" + facetEntry.getKey() + "\"" + " : ");
|
240 |
|
|
builder.append(facetEntry.getValue());
|
241 |
|
|
refineSolrResults.add(builder.toString());
|
242 |
|
|
}
|
243 |
|
|
|
244 |
55643
|
katerina.i
|
} else { //the old implementation & xml as default
|
245 |
47316
|
katerina.i
|
logger.debug("Creating old browse results.");
|
246 |
|
|
createXmlRefineFields(refineSolrResults, oldRefineTransformer);
|
247 |
25725
|
antonis.le
|
}
|
248 |
47316
|
katerina.i
|
}
|
249 |
25725
|
antonis.le
|
|
250 |
47316
|
katerina.i
|
for (int i = 0; i < docs.size(); i++) {
|
251 |
55643
|
katerina.i
|
String result = (String) docs.get(i).get("__result");
|
252 |
|
|
|
253 |
|
|
logger.debug("["+ i +"]: " + docs.get(i).get("__result"));
|
254 |
|
|
|
255 |
47316
|
katerina.i
|
try {
|
256 |
|
|
if (transformer != null) {
|
257 |
55643
|
katerina.i
|
logger.debug("1 >>>>>>" + result);
|
258 |
47316
|
katerina.i
|
String xml = result.replaceAll("<em>","").replaceAll("</em>","");
|
259 |
|
|
result = transformer.transform(xml);
|
260 |
55643
|
katerina.i
|
logger.debug("2 >>>>>>" + result);
|
261 |
47316
|
katerina.i
|
}
|
262 |
55643
|
katerina.i
|
|
263 |
47316
|
katerina.i
|
} catch (TransformerException te) {
|
264 |
|
|
logger.warn("Error transforming " + result, te);
|
265 |
|
|
continue;
|
266 |
|
|
}
|
267 |
|
|
|
268 |
|
|
if (format != null && format.equals(MediaType.APPLICATION_JSON)) {
|
269 |
|
|
searchSolrResults.add(SolrResultsFormatter.xml2Json(result));
|
270 |
|
|
} else { // default xml
|
271 |
|
|
searchSolrResults.add(result);
|
272 |
|
|
}
|
273 |
25725
|
antonis.le
|
}
|
274 |
|
|
|
275 |
47316
|
katerina.i
|
Map<String,List<String>> response = new HashMap<String, List<String>>();
|
276 |
45684
|
katerina.i
|
|
277 |
55643
|
katerina.i
|
//logger.debug("refine results " + refineSolrResults);
|
278 |
56601
|
katerina.i
|
//logger.info("search results SIZE " + searchSolrResults.size());
|
279 |
|
|
//logger.info("search results " + searchSolrResults);
|
280 |
47316
|
katerina.i
|
|
281 |
56601
|
katerina.i
|
|
282 |
47316
|
katerina.i
|
response.put("refine",refineSolrResults);
|
283 |
|
|
response.put("search", searchSolrResults);
|
284 |
|
|
|
285 |
|
|
return response;
|
286 |
|
|
|
287 |
|
|
} catch (SolrServerException sse) {
|
288 |
|
|
logger.error("Error calling Solr.", sse);
|
289 |
55643
|
katerina.i
|
|
290 |
|
|
} catch (IOException ioe) {
|
291 |
|
|
logger.error("Error calling Solr.", ioe);
|
292 |
56601
|
katerina.i
|
|
293 |
47316
|
katerina.i
|
}
|
294 |
56601
|
katerina.i
|
|
295 |
47316
|
katerina.i
|
return null;
|
296 |
25725
|
antonis.le
|
}
|
297 |
|
|
|
298 |
57207
|
katerina.i
|
/**
|
299 |
|
|
* limit is the maximum number of results the cursor get is allowed to fetch. If limit is set to -1 all
|
300 |
|
|
* results are returned.
|
301 |
|
|
*/
|
302 |
|
|
public void cursorGet(Transformer transformer, int limit, OutputStream os) throws SolrServerException, SearchServiceException {
|
303 |
|
|
|
304 |
|
|
int rows = 500;
|
305 |
|
|
int limitCounter = -1;
|
306 |
|
|
|
307 |
49850
|
katerina.i
|
queryOpts.add("start", "0");
|
308 |
49870
|
katerina.i
|
queryOpts.add("rows", "0");
|
309 |
|
|
queryOpts.remove("rows");
|
310 |
57207
|
katerina.i
|
queryOpts.add("rows", rows+"");
|
311 |
49850
|
katerina.i
|
queryOpts.add("fl", "__result");
|
312 |
|
|
queryOpts.add("shards.tolerant","true");
|
313 |
|
|
queryOpts.add("cursorMark", "*");
|
314 |
|
|
queryOpts.add("sort", "__indexrecordidentifier asc");
|
315 |
|
|
|
316 |
|
|
String cursorMark = "*";
|
317 |
|
|
String nextCursorMark = "";
|
318 |
|
|
|
319 |
57207
|
katerina.i
|
if ( limit > 0 ) {
|
320 |
|
|
limitCounter = limit/rows;
|
321 |
|
|
logger.info("limit counter " + limitCounter);
|
322 |
|
|
}
|
323 |
|
|
|
324 |
55643
|
katerina.i
|
try {
|
325 |
|
|
QueryResponse resp = solrClient.query(SolrParams.toSolrParams(queryOpts));
|
326 |
49850
|
katerina.i
|
|
327 |
57207
|
katerina.i
|
while (!cursorMark.equals(nextCursorMark) && ( limitCounter > 0 || limitCounter == -1)) {
|
328 |
|
|
//logger.info(">> " + limitCounter);
|
329 |
55643
|
katerina.i
|
resp = solrClient.query(SolrParams.toSolrParams(queryOpts));
|
330 |
|
|
cursorMark = nextCursorMark;
|
331 |
|
|
nextCursorMark = resp.getNextCursorMark();
|
332 |
49850
|
katerina.i
|
|
333 |
55643
|
katerina.i
|
for (int i = 0; i < resp.getResults().size(); i++) {
|
334 |
|
|
if (transformer != null) {
|
335 |
|
|
String result = null;
|
336 |
|
|
try {
|
337 |
57207
|
katerina.i
|
logger.debug("PRE RESULT " + resp.getResults().get(i).get("__result"));
|
338 |
55643
|
katerina.i
|
result = transformer.transform((String) resp.getResults().get(i).get("__result"));
|
339 |
|
|
logger.debug("RESULT " + result);
|
340 |
49870
|
katerina.i
|
|
341 |
55643
|
katerina.i
|
} catch (TransformerException te) {
|
342 |
|
|
logger.warn("Error transforming " + result, te);
|
343 |
|
|
continue;
|
344 |
|
|
}
|
345 |
50018
|
katerina.i
|
|
346 |
55643
|
katerina.i
|
try {
|
347 |
|
|
os.write(result.getBytes());
|
348 |
|
|
os.flush();
|
349 |
|
|
} catch (IOException e) {
|
350 |
|
|
logger.error("Cursor get... ", e);
|
351 |
|
|
continue;
|
352 |
|
|
}
|
353 |
50018
|
katerina.i
|
}
|
354 |
49850
|
katerina.i
|
}
|
355 |
55643
|
katerina.i
|
|
356 |
|
|
queryOpts.remove("cursorMark");
|
357 |
|
|
queryOpts.add("cursorMark", nextCursorMark);
|
358 |
57207
|
katerina.i
|
limitCounter--;
|
359 |
49850
|
katerina.i
|
}
|
360 |
|
|
|
361 |
55643
|
katerina.i
|
} catch (IOException ioe) {
|
362 |
|
|
logger.error("Error executing solr query. ", ioe);
|
363 |
49870
|
katerina.i
|
}
|
364 |
49850
|
katerina.i
|
}
|
365 |
|
|
|
366 |
50401
|
katerina.i
|
|
367 |
47316
|
katerina.i
|
//TODO get rid of this as soon as Joomla portal is out
|
368 |
|
|
//Just copied and refactored the old one...
|
369 |
|
|
@Deprecated
|
370 |
|
|
private void createXmlRefineFields(List<String> res, Transformer oldRefineTransformer) {
|
371 |
|
|
int max = -12;
|
372 |
25725
|
antonis.le
|
|
373 |
47316
|
katerina.i
|
for (FacetField field:facetFields) {
|
374 |
|
|
logger.debug("field " + field.getName() + " has count " + field.getValueCount());
|
375 |
25725
|
antonis.le
|
|
376 |
47316
|
katerina.i
|
if (field.getValueCount() > max) {
|
377 |
|
|
max = field.getValueCount();
|
378 |
|
|
}
|
379 |
|
|
}
|
380 |
25725
|
antonis.le
|
|
381 |
47316
|
katerina.i
|
logger.debug("max " + max);
|
382 |
25725
|
antonis.le
|
|
383 |
47316
|
katerina.i
|
for (int i = 0; i < max; i++) {
|
384 |
|
|
StringBuilder sb = new StringBuilder();
|
385 |
25725
|
antonis.le
|
|
386 |
47316
|
katerina.i
|
sb.append("<row>");
|
387 |
|
|
for (FacetField field:facetFields) {
|
388 |
|
|
if (field.getValueCount() > i) {
|
389 |
|
|
sb.append("<groupresult field=\"").append(field.getName()).append("\">");
|
390 |
|
|
sb.append("<count>").append(field.getValues().get(i).getCount()).append("</count>");
|
391 |
|
|
sb.append("<originalValue>").append(StringEscapeUtils.escapeXml(field.getValues().get(i).getName())).append("</originalValue>");
|
392 |
25725
|
antonis.le
|
|
393 |
47316
|
katerina.i
|
String[] facetValues = field.getValues().get(i).getName().split("\\|\\|");
|
394 |
|
|
if(facetValues.length > 1) {
|
395 |
|
|
sb.append("<value>").append(StringEscapeUtils.escapeXml(facetValues[1])).append("</value>");
|
396 |
|
|
} else {
|
397 |
|
|
sb.append("<value>").append(StringEscapeUtils.escapeXml(facetValues[0])).append("</value>");
|
398 |
|
|
}
|
399 |
|
|
sb.append("</groupresult>");
|
400 |
|
|
}
|
401 |
25725
|
antonis.le
|
}
|
402 |
47316
|
katerina.i
|
sb.append("</row>");
|
403 |
25725
|
antonis.le
|
|
404 |
47316
|
katerina.i
|
try {
|
405 |
|
|
//logger.debug("row: " + sb.toString());
|
406 |
|
|
//logger.debug("row2: " + oldRefineTransformer.transform(sb.toString()));
|
407 |
|
|
|
408 |
|
|
//TODO remove
|
409 |
|
|
res.add(oldRefineTransformer.transform(sb.toString()));
|
410 |
|
|
|
411 |
|
|
} catch (TransformerException te) {
|
412 |
|
|
logger.error("Cannot transform refine for: " + sb.toString(), te);
|
413 |
|
|
}
|
414 |
25725
|
antonis.le
|
}
|
415 |
|
|
}
|
416 |
|
|
|
417 |
55652
|
katerina.i
|
/* public static void main(String[] args) throws IOException, CQLParseException, SolrServerException {
|
418 |
47316
|
katerina.i
|
CloudSolrServer solrClient = new CloudSolrServer("beta.solr.openaire.eu:9983");
|
419 |
55652
|
katerina.i
|
solrClient.setDefaultCollection("DMF-index-openaire");
|
420 |
49850
|
katerina.i
|
|
421 |
47316
|
katerina.i
|
NamedList<String> queryOpts = new NamedList<String>();
|
422 |
25725
|
antonis.le
|
|
423 |
49850
|
katerina.i
|
//q=*:*&start=0&rows=10&cursorMark=*&sort=dateofcollection asc
|
424 |
55652
|
katerina.i
|
queryOpts.add("q", new CqlTranslatorImpl().getTranslatedQuery("objIdentifier = acm_________::0002c24f82c295e925a2bdf7bbf49bfc").asLucene());
|
425 |
49850
|
katerina.i
|
queryOpts.add("start", "0");
|
426 |
55652
|
katerina.i
|
queryOpts.add("rows", "1");
|
427 |
|
|
queryOpts.add("fl", "__result");
|
428 |
49850
|
katerina.i
|
queryOpts.add("shards.tolerant","true");
|
429 |
55652
|
katerina.i
|
queryOpts.add("cursorMark", "*");
|
430 |
|
|
queryOpts.add("sort", "__indexrecordidentifier asc");
|
431 |
49850
|
katerina.i
|
|
432 |
|
|
|
433 |
|
|
//queryOpts.add("q", new CqlTranslatorImpl().getTranslatedQuery("oaftype exact project").asLucene());
|
434 |
47316
|
katerina.i
|
NamedList<String> extraOpts = new NamedList<String>();
|
435 |
30806
|
katerina.i
|
|
436 |
49850
|
katerina.i
|
QueryResponse resp = solrClient.query(SolrParams.toSolrParams(queryOpts));
|
437 |
|
|
|
438 |
|
|
System.out.println("results " + resp.getResults().size());
|
439 |
|
|
|
440 |
55652
|
katerina.i
|
String cursorMark = "*";
|
441 |
49850
|
katerina.i
|
String nextCursorMark = "";
|
442 |
|
|
|
443 |
|
|
int curs = 0;
|
444 |
|
|
while (!cursorMark.equals(nextCursorMark)) {
|
445 |
|
|
System.out.println("cursor " + cursorMark);
|
446 |
|
|
System.out.println("next cursor " + nextCursorMark);
|
447 |
|
|
cursorMark = nextCursorMark;
|
448 |
|
|
for (int i = 0; i < resp.getResults().size(); i++) {
|
449 |
|
|
String result = ((ArrayList<String>) resp.getResults().get(i).get("__result")).get(0);
|
450 |
|
|
//System.out.println(result);
|
451 |
|
|
resp = solrClient.query(SolrParams.toSolrParams(queryOpts));
|
452 |
|
|
}
|
453 |
|
|
nextCursorMark = resp.getNextCursorMark();
|
454 |
|
|
queryOpts.add("cursorMark", nextCursorMark);
|
455 |
|
|
|
456 |
|
|
System.out.println("CURS " + curs);
|
457 |
|
|
curs ++;
|
458 |
|
|
|
459 |
|
|
}
|
460 |
|
|
|
461 |
|
|
|
462 |
|
|
//System.out.println((new CqlTranslatorImpl().getTranslatedQuery("objIdentifier = acm_________::0002c24f82c295e925a2bdf7bbf49bfc").asLucene()));
|
463 |
|
|
|
464 |
|
|
|
465 |
|
|
|
466 |
47316
|
katerina.i
|
//extraOpts.add("start", "1");
|
467 |
|
|
// extraOpts.add("rows", "10");
|
468 |
|
|
// extraOpts.addAll(queryOpts);
|
469 |
45684
|
katerina.i
|
|
470 |
49850
|
katerina.i
|
//queryOpts.add("facet", "true");
|
471 |
47316
|
katerina.i
|
//TranslatedQuery translatedQuery = new CqlTranslatorImpl().getTranslatedQuery("oaftype=result sortBy resultdateofacceptance/sort.descending");
|
472 |
45684
|
katerina.i
|
|
473 |
47316
|
katerina.i
|
// queryOpts.add("q", "oaftype=project");
|
474 |
49850
|
katerina.i
|
//queryOpts.add("facet", "true");
|
475 |
|
|
//queryOpts.add("facet.mincount", "1");
|
476 |
|
|
//queryOpts.add("fq", "popularity");
|
477 |
45684
|
katerina.i
|
|
478 |
25725
|
antonis.le
|
|
479 |
|
|
|
480 |
47316
|
katerina.i
|
// queryOpts.put("fq", new CqlTranslatorImpl().getTranslatedQuery("").asLucene());
|
481 |
|
|
// queryOpts.add("facet.field", "contextid");
|
482 |
|
|
// queryOpts.add("facet.field", "contextname");
|
483 |
|
|
// queryOpts.add("facet.mincount", "1");
|
484 |
|
|
// queryOpts.add("facet.threads", "10");
|
485 |
|
|
// System.out.println(translatedQuery.getOptions().getSort().getMode());
|
486 |
|
|
// System.out.println(translatedQuery.getOptions().getSort().getField());
|
487 |
30806
|
katerina.i
|
|
488 |
47316
|
katerina.i
|
//queryOpts.add("sort", translatedQuery.getOptions().getSort().getField() + " " + translatedQuery.getOptions().getSort().getMode() );
|
489 |
25725
|
antonis.le
|
|
490 |
|
|
|
491 |
49850
|
katerina.i
|
|
492 |
47316
|
katerina.i
|
/* QueryResponse resp = null;
|
493 |
|
|
synchronized (solrClient) {
|
494 |
|
|
resp = solrClient.query(SolrParams.toSolrParams(extraOpts));
|
495 |
|
|
}*/
|
496 |
|
|
// System.out.println("time: " + resp.getElapsedTime());
|
497 |
|
|
//System.out.println("results: " + resp.getResults());
|
498 |
25725
|
antonis.le
|
|
499 |
47316
|
katerina.i
|
/* System.out.println(resp.getFacetField("contextname").getValueCount());
|
500 |
25725
|
antonis.le
|
|
501 |
47316
|
katerina.i
|
for (FacetField.Count count:resp.getFacetField("contextname").getValues())
|
502 |
|
|
System.out.println(count.getName() + " : " + count.getCount());
|
503 |
25725
|
antonis.le
|
|
504 |
|
|
|
505 |
47316
|
katerina.i
|
int max = -12;
|
506 |
45684
|
katerina.i
|
|
507 |
47316
|
katerina.i
|
for (FacetField field:resp.getFacetFields()) {
|
508 |
|
|
if (field.getValueCount() > max)
|
509 |
|
|
max = field.getValueCount();
|
510 |
45684
|
katerina.i
|
|
511 |
25725
|
antonis.le
|
}
|
512 |
|
|
|
513 |
47316
|
katerina.i
|
System.out.println("max: " + max);
|
514 |
|
|
*/
|
515 |
55652
|
katerina.i
|
// }
|
516 |
25725
|
antonis.le
|
|
517 |
49850
|
katerina.i
|
// @Override
|
518 |
|
|
// public EPR getEpr() {
|
519 |
|
|
// return epr;
|
520 |
|
|
// }
|
521 |
47316
|
katerina.i
|
}
|
522 |
45684
|
katerina.i
|
|
523 |
47316
|
katerina.i
|
class BrowseField {
|
524 |
|
|
String name;
|
525 |
45684
|
katerina.i
|
|
526 |
47316
|
katerina.i
|
public String getName() {
|
527 |
|
|
return name;
|
528 |
|
|
}
|
529 |
|
|
|
530 |
|
|
public void setName(String name) {
|
531 |
|
|
this.name = name;
|
532 |
|
|
}
|
533 |
|
|
|
534 |
|
|
public String getId() {
|
535 |
|
|
return id;
|
536 |
|
|
}
|
537 |
|
|
|
538 |
|
|
public void setId(String id) {
|
539 |
|
|
this.id = id;
|
540 |
|
|
}
|
541 |
|
|
|
542 |
|
|
public String getCount() {
|
543 |
|
|
return count;
|
544 |
|
|
}
|
545 |
|
|
|
546 |
|
|
public void setCount(String count) {
|
547 |
|
|
this.count = count;
|
548 |
|
|
}
|
549 |
|
|
|
550 |
|
|
String id;
|
551 |
|
|
String count;
|
552 |
|
|
|
553 |
|
|
|
554 |
25725
|
antonis.le
|
}
|