diff --git a/source/net/yacy/cora/federate/solr/responsewriter/YJsonResponseWriter.java b/source/net/yacy/cora/federate/solr/responsewriter/YJsonResponseWriter.java index 3588a336c..eda6b71fc 100644 --- a/source/net/yacy/cora/federate/solr/responsewriter/YJsonResponseWriter.java +++ b/source/net/yacy/cora/federate/solr/responsewriter/YJsonResponseWriter.java @@ -54,6 +54,9 @@ import org.apache.solr.search.SolrIndexSearcher; /** * write the opensearch result in YaCys special way to include as much as in opensearch is included. * This will also include YaCy facets. + * + * example: + * http://localhost:8090/solr/select?hl=false&wt=yjson&facet=true&facet.mincount=1&facet.field=host_s&facet.field=url_file_ext_s&facet.field=url_protocol_s&facet.field=author_sxt&facet.field=collection_sxt&start=0&rows=10&query=www */ public class YJsonResponseWriter implements QueryResponseWriter { @@ -135,7 +138,6 @@ public class YJsonResponseWriter implements QueryResponseWriter { Document doc = searcher.doc(id, OpensearchResponseWriter.SOLR_FIELDS); List fields = doc.getFields(); int fieldc = fields.size(); - List texts = new ArrayList(); MultiProtocolURL url = null; String urlhash = null; List descriptions = new ArrayList(); @@ -166,13 +168,11 @@ public class YJsonResponseWriter implements QueryResponseWriter { } if (CollectionSchema.title.getSolrFieldName().equals(fieldName)) { title = value.stringValue(); - texts.add(title); continue; } if (CollectionSchema.description_txt.getSolrFieldName().equals(fieldName)) { String description = value.stringValue(); descriptions.add(description); - texts.add(description); continue; } if (CollectionSchema.id.getSolrFieldName().equals(fieldName)) { @@ -197,25 +197,15 @@ public class YJsonResponseWriter implements QueryResponseWriter { solitaireTag(writer, "sizename", sizemb > 0 ? (Integer.toString(sizemb) + " mbyte") : sizekb > 0 ? (Integer.toString(sizekb) + " kbyte") : (Integer.toString(size) + " byte")); continue; } - if (CollectionSchema.text_t.getSolrFieldName().equals(fieldName)) { - texts.add(value.stringValue()); - continue; - } - if (CollectionSchema.h1_txt.getSolrFieldName().equals(fieldName) || CollectionSchema.h2_txt.getSolrFieldName().equals(fieldName) || - CollectionSchema.h3_txt.getSolrFieldName().equals(fieldName) || CollectionSchema.h4_txt.getSolrFieldName().equals(fieldName) || - CollectionSchema.h5_txt.getSolrFieldName().equals(fieldName) || CollectionSchema.h6_txt.getSolrFieldName().equals(fieldName)) { - // because these are multi-valued fields, there can be several of each - texts.add(value.stringValue()); - continue; - } //missing: "code","faviconCode" } // compute snippet from texts solitaireTag(writer, "path", path.toString()); - solitaireTag(writer, "title", title.length() == 0 ? (texts.size() == 0 ? path.toString() : texts.get(0)) : title); + solitaireTag(writer, "title", title.length() == 0 ? path.toString() : title); LinkedHashSet snippet = urlhash == null ? null : snippets.get(urlhash); + if (snippet == null) {snippet = new LinkedHashSet<>(); snippet.addAll(descriptions);} OpensearchResponseWriter.removeSubsumedTitle(snippet, title); writer.write("\"description\":\""); writer.write(serverObjects.toJSON(snippet == null || snippet.size() == 0 ? (descriptions.size() > 0 ? descriptions.get(0) : "") : OpensearchResponseWriter.getLargestSnippet(snippet))); writer.write("\"\n}\n"); if (i < responseCount - 1) { diff --git a/source/net/yacy/http/servlets/SolrSelectServlet.java b/source/net/yacy/http/servlets/SolrSelectServlet.java index e93eb6891..5d440588c 100644 --- a/source/net/yacy/http/servlets/SolrSelectServlet.java +++ b/source/net/yacy/http/servlets/SolrSelectServlet.java @@ -124,7 +124,7 @@ public class SolrSelectServlet extends HttpServlet { Switchboard sb = Switchboard.getSwitchboard(); // TODO: isUserInRole needs a login to jetty container (not done automatically on admin from localhost) - boolean authenticated = hrequest.isUserInRole(UserDB.AccessRight.ADMIN_RIGHT.toString());; + boolean authenticated = hrequest.isUserInRole(UserDB.AccessRight.ADMIN_RIGHT.toString()); // count remote searches if this was part of a p2p search if (mmsp.getMap().containsKey("partitions")) { @@ -190,11 +190,21 @@ public class SolrSelectServlet extends HttpServlet { if ((responseWriter instanceof YJsonResponseWriter || responseWriter instanceof OpensearchResponseWriter) && "true".equals(mmsp.get("hl", "true"))) { // add options for snippet generation if (!mmsp.getMap().containsKey("hl.q")) mmsp.getMap().put("hl.q", new String[]{q}); - if (!mmsp.getMap().containsKey("hl.fl")) mmsp.getMap().put("hl.fl", new String[]{CollectionSchema.description_txt + "," + CollectionSchema.h4_txt.getSolrFieldName() + "," + CollectionSchema.h3_txt.getSolrFieldName() + "," + CollectionSchema.h2_txt.getSolrFieldName() + "," + CollectionSchema.h1_txt.getSolrFieldName() + "," + CollectionSchema.text_t.getSolrFieldName()}); + if (!mmsp.getMap().containsKey("hl.fl")) mmsp.getMap().put("hl.fl", new String[]{CollectionSchema.description_txt.getSolrFieldName() + "," + CollectionSchema.h4_txt.getSolrFieldName() + "," + CollectionSchema.h3_txt.getSolrFieldName() + "," + CollectionSchema.h2_txt.getSolrFieldName() + "," + CollectionSchema.h1_txt.getSolrFieldName() + "," + CollectionSchema.text_t.getSolrFieldName()}); if (!mmsp.getMap().containsKey("hl.alternateField")) mmsp.getMap().put("hl.alternateField", new String[]{CollectionSchema.description_txt.getSolrFieldName()}); if (!mmsp.getMap().containsKey("hl.simple.pre")) mmsp.getMap().put("hl.simple.pre", new String[]{""}); if (!mmsp.getMap().containsKey("hl.simple.post")) mmsp.getMap().put("hl.simple.post", new String[]{""}); if (!mmsp.getMap().containsKey("hl.fragsize")) mmsp.getMap().put("hl.fragsize", new String[]{Integer.toString(SearchEvent.SNIPPET_MAX_LENGTH)}); + if (!mmsp.getMap().containsKey("fl")) mmsp.getMap().put("fl", new String[]{ + CollectionSchema.sku.getSolrFieldName() + "," + + CollectionSchema.title + "," + + CollectionSchema.description_txt.getSolrFieldName() + "," + + CollectionSchema.id.getSolrFieldName() + "," + + CollectionSchema.url_paths_sxt.getSolrFieldName() + "," + + CollectionSchema.last_modified.getSolrFieldName() + "," + + CollectionSchema.size_i.getSolrFieldName() + "," + + CollectionSchema.url_protocol_s.getSolrFieldName() + "," + + CollectionSchema.url_file_ext_s.getSolrFieldName()}); } // get the embedded connector