diff --git a/htroot/yacysearch.java b/htroot/yacysearch.java index d213d515c..f6c3ad896 100644 --- a/htroot/yacysearch.java +++ b/htroot/yacysearch.java @@ -533,16 +533,16 @@ public class yacysearch { String authorhash = null; if ( authori >= 0 ) { // check if the author was given with single quotes or without - final boolean quotes = (querystring.charAt(authori + 7) == '%'); + final boolean quotes = (querystring.charAt(authori + 7) == '('); String author; if ( quotes ) { - int ftb = querystring.indexOf('%', authori + 8); + int ftb = querystring.indexOf(')', authori + 8); if ( ftb == -1 ) { ftb = querystring.length() + 1; } author = querystring.substring(authori + 8, ftb); - querystring = querystring.replace("author:%" + author + "%", ""); - modifier.append("author:%").append(author).append("% "); + querystring = querystring.replace("author:(" + author + ")", ""); + modifier.append("author:(").append(author).append(") "); } else { int ftb = querystring.indexOf(' ', authori); if ( ftb == -1 ) { diff --git a/htroot/yacysearchtrailer.java b/htroot/yacysearchtrailer.java index 28d735fbb..51f138c83 100644 --- a/htroot/yacysearchtrailer.java +++ b/htroot/yacysearchtrailer.java @@ -77,13 +77,19 @@ public class yacysearchtrailer { while (i < 10 && navigatorIterator.hasNext()) { name = navigatorIterator.next(); count = namespaceNavigator.get(name); - nav = "inurl:" + name; + nav = "inurl%3A" + name; queryStringForUrl = theQuery.queryStringForUrl(); p = queryStringForUrl.indexOf(nav); - prop.put("nav-namespace_element_" + i + "_on", 1); - prop.put(fileType, "nav-namespace_element_" + i + "_modifier", nav); + if (p < 0) { + queryStringForUrl += "+" + nav; + prop.put("nav-namespace_element_" + i + "_on", 1); + prop.put(fileType, "nav-namespace_element_" + i + "_modifier", nav); + } else { + prop.put("nav-namespace_element_" + i + "_on", 0); + queryStringForUrl = (queryStringForUrl.substring(0, p) + queryStringForUrl.substring(p + nav.length())).trim(); + } prop.put(fileType, "nav-namespace_element_" + i + "_name", name); - prop.put(fileType, "nav-namespace_element_" + i + "_url", QueryParams.navurl(fileType.name().toLowerCase(), 0, theQuery, queryStringForUrl + "+" + nav, theQuery.urlMask.toString(), theQuery.navigators).toString()); + prop.put(fileType, "nav-namespace_element_" + i + "_url", QueryParams.navurl(fileType.name().toLowerCase(), 0, theQuery, queryStringForUrl, theQuery.urlMask.toString(), theQuery.navigators).toString()); prop.put("nav-namespace_element_" + i + "_count", count); prop.put("nav-namespace_element_" + i + "_nl", 1); i++; @@ -105,13 +111,20 @@ public class yacysearchtrailer { while (i < 20 && navigatorIterator.hasNext()) { name = navigatorIterator.next(); count = hostNavigator.get(name); - nav = "site:" + name; + nav = "site%3A" + name; queryStringForUrl = theQuery.queryStringForUrl(); p = queryStringForUrl.indexOf(nav); - prop.put("nav-domains_element_" + i + "_on", 1); - prop.put(fileType, "nav-domains_element_" + i + "_modifier", nav); + if (p < 0) { + queryStringForUrl += "+" + nav; + prop.put("nav-domains_element_" + i + "_on", 1); + prop.put(fileType, "nav-domains_element_" + i + "_modifier", nav); + } else { + queryStringForUrl = (queryStringForUrl.substring(0, p) + queryStringForUrl.substring(p + nav.length())).trim(); + prop.put("nav-authors_element_" + i + "_on", 0); + prop.put(fileType, "nav-authors_element_" + i + "_modifier", "-" + nav); + } prop.put(fileType, "nav-domains_element_" + i + "_name", name); - prop.put(fileType, "nav-domains_element_" + i + "_url", QueryParams.navurl(fileType.name().toLowerCase(), 0, theQuery, queryStringForUrl + "+" + nav, theQuery.urlMask.toString(), theQuery.navigators).toString()); + prop.put(fileType, "nav-domains_element_" + i + "_url", QueryParams.navurl(fileType.name().toLowerCase(), 0, theQuery, queryStringForUrl, theQuery.urlMask.toString(), theQuery.navigators).toString()); prop.put("nav-domains_element_" + i + "_count", count); prop.put("nav-domains_element_" + i + "_nl", 1); i++; @@ -133,13 +146,20 @@ public class yacysearchtrailer { while (i < 20 && navigatorIterator.hasNext()) { name = navigatorIterator.next().trim(); count = authorNavigator.get(name); - nav = (name.indexOf(' ', 0) < 0) ? "author:" + name : "author:%" + name.replace(" ", "+") + "%"; + nav = (name.indexOf(' ', 0) < 0) ? "author%3A" + name : "author%3A%28" + name.replace(" ", "+") + "%29"; queryStringForUrl = theQuery.queryStringForUrl(); p = queryStringForUrl.indexOf(nav); - prop.put("nav-authors_element_" + i + "_on", 1); - prop.put(fileType, "nav-authors_element_" + i + "_modifier", nav); + if (p < 0) { + queryStringForUrl += "+" + nav; + prop.put("nav-authors_element_" + i + "_on", 1); + prop.put(fileType, "nav-authors_element_" + i + "_modifier", nav); + } else { + queryStringForUrl = (queryStringForUrl.substring(0, p) + queryStringForUrl.substring(p + nav.length())).trim(); + prop.put("nav-authors_element_" + i + "_on", 0); + prop.put(fileType, "nav-authors_element_" + i + "_modifier", "-" + nav); + } prop.put(fileType, "nav-authors_element_" + i + "_name", name); - prop.put(fileType, "nav-authors_element_" + i + "_url", QueryParams.navurl(fileType.name().toLowerCase(), 0, theQuery, queryStringForUrl + "+" + nav, theQuery.urlMask.toString(), theQuery.navigators).toString()); + prop.put(fileType, "nav-authors_element_" + i + "_url", QueryParams.navurl(fileType.name().toLowerCase(), 0, theQuery, queryStringForUrl, theQuery.urlMask.toString(), theQuery.navigators).toString()); prop.put("nav-authors_element_" + i + "_count", count); prop.put("nav-authors_element_" + i + "_nl", 1); i++; @@ -200,7 +220,7 @@ public class yacysearchtrailer { } else { queryStringForUrl = (queryStringForUrl.substring(0, p) + queryStringForUrl.substring(p + nav.length())).trim(); prop.put("nav-protocols_element_" + i + "_on", 0); - prop.put(fileType, "nav-protocols_element_" + i + "_modifier", nav); + prop.put(fileType, "nav-protocols_element_" + i + "_modifier", "-" + nav); } prop.put(fileType, "nav-protocols_element_" + i + "_name", name); prop.put(fileType, "nav-protocols_element_" + i + "_url", QueryParams.navurl(fileType.name().toLowerCase(), 0, theQuery, queryStringForUrl, theQuery.urlMask.toString(), theQuery.navigators).toString()); diff --git a/source/net/yacy/search/query/RWIProcess.java b/source/net/yacy/search/query/RWIProcess.java index 1238987fe..d72013d63 100644 --- a/source/net/yacy/search/query/RWIProcess.java +++ b/source/net/yacy/search/query/RWIProcess.java @@ -795,9 +795,6 @@ public final class RWIProcess extends Thread if ( !this.query.navigators.equals("all") && this.query.navigators.indexOf("namespace", 0) < 0 ) { return new ClusteredScoreMap(); } - if ( this.namespaceNavigator.sizeSmaller(2) ) { - this.namespaceNavigator.clear(); // navigators with one entry are not useful - } return this.namespaceNavigator; } @@ -825,9 +822,6 @@ public final class RWIProcess extends Thread } } } - if ( result.sizeSmaller(2) ) { - result.clear(); // navigators with one entry are not useful - } return result; } @@ -939,9 +933,6 @@ public final class RWIProcess extends Thread if ( !this.query.navigators.equals("all") && this.query.navigators.indexOf("authors", 0) < 0 ) { return new ConcurrentScoreMap(); } - if ( this.authorNavigator.sizeSmaller(2) ) { - this.authorNavigator.clear(); // navigators with one entry are not useful - } return this.authorNavigator; }