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 @@ <script type="text/javascript"> //<![CDATA[ //document.write("\<a id=\"rsslink\" href=\"yacysearch.rss?" + window.location.search.substring(1) + "\"\>") -document.write("\<a id=\"rsslink\" href=\"/solr/select?hl=false&wt=opensearch&facet=true&facet.mincount=1&facet.field=url_file_ext_s&start=0&rows=10&query=" + window.location.search.substring(1) + "\"\>") +document.write("\<a id=\"rsslink\" href=\"/solr/select?hl=false&wt=opensearch&facet=true&facet.mincount=1&facet.field=url_file_ext_s&start=0&rows=10&query=" + window.location.search.substring(1) + "\"\><img src=\"env/grafics/api.png\" width=\"60\" height=\"40\" alt=\"API\" /></a>"); //]]> </script> -<img src="env/grafics/api.png" width="60" height="40" alt="API" /></a> <span>This search result can also be retrieved as RSS/<a href="http://www.opensearch.org">opensearch</a> output. The query format is similar to <a href="http://www.loc.gov/standards/sru/">SRU</a>. 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 <a href="http://www.yacy-websuche.de <fieldset class="yacys"> <input type="hidden" name="maximumRecords" value="#[maximumRecords]#" /> <input type="hidden" name="startRecord" value="#[startRecord]#" /> - <input type="hidden" name="verify", value="false" /> - <input type="hidden" name="resource", value="local" /> <input type="hidden" name="contentdom", value="all" /> <input id="search" class="searchinput" name="query" type="text" value="#[query]#" size="40" maxlength="80" onFocus="this.select()" /> #(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<Integer> authors = facetFields == null ? null : (NamedList<Integer>) 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<Map.Entry<String, Integer>> l = new ArrayList<Map.Entry<String,Integer>>(); for (Map.Entry<String, Integer> 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 { // <key1>=<value1>'&'<key2>=<value2>'&'<key3>=<value3> // 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; }