From d3508fa8ffd5abbcd89f03e158c916ae5d507b42 Mon Sep 17 00:00:00 2001 From: Michael Peter Christen Date: Wed, 13 Feb 2013 00:01:38 +0100 Subject: [PATCH] fixed json search, quotes, auto-facets, urls etc. for yacyinteractive.html --- htroot/solr/select.java | 2 +- htroot/yacyinteractive.html | 5 +---- .../federate/solr/responsewriter/JsonResponseWriter.java | 8 ++++---- source/net/yacy/search/query/QueryModifier.java | 7 +++++++ source/net/yacy/server/http/HTTPDemon.java | 1 + source/net/yacy/server/serverObjects.java | 2 +- 6 files changed, 15 insertions(+), 10 deletions(-) diff --git a/htroot/solr/select.java b/htroot/solr/select.java index 70950269c..b5fac4d1c 100644 --- a/htroot/solr/select.java +++ b/htroot/solr/select.java @@ -186,7 +186,7 @@ public class select { if (connector == null) return null; // do the solr request, generate facets if we use a special YaCy format - SolrParams params = post.toSolrParams(responseWriter instanceof JsonResponseWriter ? new YaCySchema[]{YaCySchema.host_s, YaCySchema.url_file_ext_s, YaCySchema.url_protocol_s} : null); + SolrParams params = post.toSolrParams(/*responseWriter instanceof JsonResponseWriter ? new YaCySchema[]{YaCySchema.host_s, YaCySchema.url_file_ext_s, YaCySchema.url_protocol_s} :*/ null); SolrQueryRequest req = connector.request(params); SolrQueryResponse response = null; Exception e = null; diff --git a/htroot/yacyinteractive.html b/htroot/yacyinteractive.html index 3f59e53eb..29a50f40e 100644 --- a/htroot/yacyinteractive.html +++ b/htroot/yacyinteractive.html @@ -37,10 +37,9 @@ -API This search result can also be retrieved as RSS/opensearch output. The query format is similar to SRU. Click the API icon to see an example call to the search rss API. @@ -57,8 +56,6 @@ To see a list of all APIs, please visit the - - #(allowrealtime)# diff --git a/source/net/yacy/cora/federate/solr/responsewriter/JsonResponseWriter.java b/source/net/yacy/cora/federate/solr/responsewriter/JsonResponseWriter.java index 160f9aad8..bc98e43fe 100644 --- a/source/net/yacy/cora/federate/solr/responsewriter/JsonResponseWriter.java +++ b/source/net/yacy/cora/federate/solr/responsewriter/JsonResponseWriter.java @@ -223,7 +223,7 @@ public class JsonResponseWriter implements QueryResponseWriter { NamedList authors = facetFields == null ? null : (NamedList) facetFields.get(YaCySchema.author_sxt.getSolrFieldName()); if (domains != null) { - writer.write("{\"facetname\":\"domains\",\"displayname\":\"Domains\",\"type\":\"String\",\"min\":\"0\",\"max\":\"0\",\"mean\":\"0\",\"elements\":[".toCharArray()); + writer.write("{\"facetname\":\"domains\",\"displayname\":\"Domains\",\"type\":\"String\",\"min\":\"0\",\"max\":\"0\",\"mean\":\"0\",\"elements\":[\n".toCharArray()); for (int i = 0; i < domains.size(); i++) { facetEntry(writer, "site", domains.getName(i), Integer.toString(domains.getVal(i))); if (i < domains.size() - 1) writer.write(','); @@ -232,7 +232,7 @@ public class JsonResponseWriter implements QueryResponseWriter { writer.write("]},\n".toCharArray()); } if (filetypes != null) { - writer.write("{\"facetname\":\"filetypes\",\"displayname\":\"Filetypes\",\"type\":\"String\",\"min\":\"0\",\"max\":\"0\",\"mean\":\"0\",\"elements\":[".toCharArray()); + writer.write("{\"facetname\":\"filetypes\",\"displayname\":\"Filetypes\",\"type\":\"String\",\"min\":\"0\",\"max\":\"0\",\"mean\":\"0\",\"elements\":[\n".toCharArray()); List> l = new ArrayList>(); for (Map.Entry e: filetypes) { if (e.getKey().length() <= 6) l.add(e); @@ -247,7 +247,7 @@ public class JsonResponseWriter implements QueryResponseWriter { writer.write("]},\n".toCharArray()); } if (protocols != null) { - writer.write("{\"facetname\":\"protocols\",\"displayname\":\"Protocol\",\"type\":\"String\",\"min\":\"0\",\"max\":\"0\",\"mean\":\"0\",\"elements\":[".toCharArray()); + writer.write("{\"facetname\":\"protocols\",\"displayname\":\"Protocol\",\"type\":\"String\",\"min\":\"0\",\"max\":\"0\",\"mean\":\"0\",\"elements\":[\n".toCharArray()); for (int i = 0; i < protocols.size(); i++) { facetEntry(writer, "protocol", protocols.getName(i), Integer.toString(protocols.getVal(i))); if (i < protocols.size() - 1) writer.write(','); @@ -256,7 +256,7 @@ public class JsonResponseWriter implements QueryResponseWriter { writer.write("]},\n".toCharArray()); } if (authors != null) { - writer.write("{\"facetname\":\"authors\",\"displayname\":\"Authors\",\"type\":\"String\",\"min\":\"0\",\"max\":\"0\",\"mean\":\"0\",\"elements\":[".toCharArray()); + writer.write("{\"facetname\":\"authors\",\"displayname\":\"Authors\",\"type\":\"String\",\"min\":\"0\",\"max\":\"0\",\"mean\":\"0\",\"elements\":[\n".toCharArray()); for (int i = 0; i < authors.size(); i++) { facetEntry(writer, "author", authors.getName(i), Integer.toString(authors.getVal(i))); if (i < authors.size() - 1) writer.write(','); diff --git a/source/net/yacy/search/query/QueryModifier.java b/source/net/yacy/search/query/QueryModifier.java index 44491fec7..97316f704 100644 --- a/source/net/yacy/search/query/QueryModifier.java +++ b/source/net/yacy/search/query/QueryModifier.java @@ -126,6 +126,13 @@ public class QueryModifier { } } + // check the number of quotes in the string; if there is only one double-quote, add another one. this will prevent error messages in + int p = querystring.indexOf('"'); + if (p >= 0) { + int q = querystring.indexOf('"', p + 1); + if (q < 0) querystring += '"'; + } + return querystring.trim(); } diff --git a/source/net/yacy/server/http/HTTPDemon.java b/source/net/yacy/server/http/HTTPDemon.java index e2b13c47c..ab50c41c0 100644 --- a/source/net/yacy/server/http/HTTPDemon.java +++ b/source/net/yacy/server/http/HTTPDemon.java @@ -698,6 +698,7 @@ public final class HTTPDemon implements serverHandler, Cloneable { // ='&'='&'= // the calling function must strip off a possible leading '?' char if (argsString.isEmpty()) return 0; + argsString = argsString.replaceAll(""", "%22"); argsString = argsString + "&"; // for technical reasons int sep; int eqp; diff --git a/source/net/yacy/server/serverObjects.java b/source/net/yacy/server/serverObjects.java index 75796a24f..0b2001cff 100644 --- a/source/net/yacy/server/serverObjects.java +++ b/source/net/yacy/server/serverObjects.java @@ -522,7 +522,7 @@ public class serverObjects implements Serializable, Cloneable { if (facets != null && facets.length > 0) { this.remove("facet"); this.put("facet", "true"); - for (int i = 0; i < facets.length; i++) this.put("facet.field", facets[i].getSolrFieldName()); + for (int i = 0; i < facets.length; i++) this.add("facet.field", facets[i].getSolrFieldName()); } return this.map; }