diff --git a/defaults/yacy.init b/defaults/yacy.init index e917a8d39..e90a41628 100644 --- a/defaults/yacy.init +++ b/defaults/yacy.init @@ -661,9 +661,9 @@ msgForwardingCmd=/usr/sbin/sendmail msgForwardingTo=root@localhost #crawlPause: delay time after specific functions before crawling is resumed -crawlPause.proxy=100 -crawlPause.localsearch=1000 -crawlPause.remotesearch=500 +crawlPause.proxy=10 +crawlPause.localsearch=50 +crawlPause.remotesearch=10 # Some configuration values for the crawler crawler.clientTimeout=9000 @@ -692,6 +692,9 @@ indexer.slots = 100 # maximum size of stacker queue stacker.slots = 2000 +# search options: show advanced options on main search page +search.options = true + # search domains. If set to false then that search is not available search.text = true search.image = true @@ -708,6 +711,14 @@ search.items = 10 # "_top" (top of all frames), "searchresult" (a default custom page name for search results) search.target = _self +# search result lines may show additional information for each search hit +# these information pieces may be switched on or off +search.result.show.date = true +search.result.show.size = true +search.result.show.metadata = true +search.result.show.parser = true +search.result.show.pictures = true + # specifies if yacy should set it's own referer if no referer URL # was set by the client. useYacyReferer = false diff --git a/htroot/ConfigPortal.html b/htroot/ConfigPortal.html index 65dabd883..535c298c3 100644 --- a/htroot/ConfigPortal.html +++ b/htroot/ConfigPortal.html @@ -36,6 +36,21 @@ no link to YaCy Menu (admin must navigate to /Status.html manually) +
Show Advanced Search Options on Search Page?
+
+ Show Advanced Search Options on index.html  + do not show Advanced Search +
+ +
Show Information Links for each Search Result Entry
+
+ Date  + Size  + Metadata  + Parser  + Pictures +
+
Default Pop-Up Page
Status Page  diff --git a/htroot/ConfigPortal.java b/htroot/ConfigPortal.java index b1b168f4e..6d6336f00 100644 --- a/htroot/ConfigPortal.java +++ b/htroot/ConfigPortal.java @@ -71,6 +71,12 @@ public class ConfigPortal { sb.setConfig(SwitchboardConstants.INDEX_FORWARD, post.get(SwitchboardConstants.INDEX_FORWARD, "")); HTTPDFileHandler.indexForward = post.get(SwitchboardConstants.INDEX_FORWARD, ""); sb.setConfig("publicTopmenu", post.get("publicTopmenu", "true")); + sb.setConfig("search.options", post.getBoolean("search.options", false) ? "true" : "false"); + sb.setConfig("search.result.show.date", post.getBoolean("search.result.show.date", false) ? "true" : "false"); + sb.setConfig("search.result.show.size", post.getBoolean("search.result.show.size", false) ? "true" : "false"); + sb.setConfig("search.result.show.metadata", post.getBoolean("search.result.show.metadata", false) ? "true" : "false"); + sb.setConfig("search.result.show.parser", post.getBoolean("search.result.show.parser", false) ? "true" : "false"); + sb.setConfig("search.result.show.pictures", post.getBoolean("search.result.show.pictures", false) ? "true" : "false"); } if (post.containsKey("searchpage_default")) { sb.setConfig(SwitchboardConstants.GREETING, "P2P Web Search"); @@ -89,7 +95,13 @@ public class ConfigPortal { prop.putHTML(SwitchboardConstants.GREETING_LARGE_IMAGE, sb.getConfig(SwitchboardConstants.GREETING_LARGE_IMAGE, "")); prop.putHTML(SwitchboardConstants.GREETING_SMALL_IMAGE, sb.getConfig(SwitchboardConstants.GREETING_SMALL_IMAGE, "")); prop.putHTML(SwitchboardConstants.INDEX_FORWARD, sb.getConfig(SwitchboardConstants.INDEX_FORWARD, "")); - prop.put("publicTopmenu", sb.getConfig("publicTopmenu", "").equals("true") ? 1 : 0); + prop.put("publicTopmenu", sb.getConfigBool("publicTopmenu", false) ? 1 : 0); + prop.put("search.options", sb.getConfigBool("search.options", false) ? 1 : 0); + prop.put("search.result.show.date", sb.getConfigBool("search.result.show.date", false) ? 1 : 0); + prop.put("search.result.show.size", sb.getConfigBool("search.result.show.size", false) ? 1 : 0); + prop.put("search.result.show.metadata", sb.getConfigBool("search.result.show.metadata", false) ? 1 : 0); + prop.put("search.result.show.parser", sb.getConfigBool("search.result.show.parser", false) ? 1 : 0); + prop.put("search.result.show.pictures", sb.getConfigBool("search.result.show.pictures", false) ? 1 : 0); final String browserPopUpPage = sb.getConfig(SwitchboardConstants.BROWSER_POP_UP_PAGE, "ConfigBasic.html"); prop.put("popupFront", 0); diff --git a/htroot/env/templates/header.template b/htroot/env/templates/header.template index afa1092ad..6c17c3f1c 100644 --- a/htroot/env/templates/header.template +++ b/htroot/env/templates/header.template @@ -68,7 +68,7 @@ diff --git a/htroot/env/templates/submenuPortalIntegration.template b/htroot/env/templates/submenuPortalIntegration.template index 1204ce906..ee2aaba1f 100644 --- a/htroot/env/templates/submenuPortalIntegration.template +++ b/htroot/env/templates/submenuPortalIntegration.template @@ -1,8 +1,8 @@ \ No newline at end of file diff --git a/htroot/index.html b/htroot/index.html index 7b13c043d..1fcf985b9 100644 --- a/htroot/index.html +++ b/htroot/index.html @@ -60,7 +60,7 @@ #(/searchdomswitches)# - #(searchoptions)# + #(searchoptions)#:: @@ -69,7 +69,7 @@ -

more options...

+

more options...

advanced parameters

:: diff --git a/htroot/index.java b/htroot/index.java index d3badf413..4c985ab95 100644 --- a/htroot/index.java +++ b/htroot/index.java @@ -64,7 +64,8 @@ public class index { final boolean global = (post == null) ? true : post.get("resource", "global").equals("global"); - final int searchoptions = (post == null) ? 0 : post.getInt("searchoptions", 0); + int searchoptions = (post == null) ? 1 : post.getInt("searchoptions", 1); + if (!sb.getConfigBool("search.options", true)) searchoptions = 0; final String former = (post == null) ? "" : post.get("former", ""); final int count = Math.min(100, (post == null) ? 10 : post.getInt("count", 10)); final int maximumRecords = Integer.parseInt((sb.getConfig(SwitchboardConstants.SEARCH_ITEMS, "10"))); diff --git a/htroot/yacysearchitem.html b/htroot/yacysearchitem.html index 4b43e8f1b..b1f88a6ed 100644 --- a/htroot/yacysearchitem.html +++ b/htroot/yacysearchitem.html @@ -21,7 +21,12 @@

#[description]#

#[urlname]#

-

#[date]# | #[sizename]# | Metadata | Parser | Pictures

+

+ #(showDate)#::#[date]##(/showDate)# + #(showSize)#:: | #[sizename]##(/showSize)# + #(showMetadata)#:: | Metadata#(/showMetadata)# + #(showParser)#:: | Parser#(/showParser)# + #(showPictures)#:: | Pictures

#(/showPictures)# :: #(item)#::
diff --git a/htroot/yacysearchitem.java b/htroot/yacysearchitem.java index 2d516c3ac..e16eead4f 100644 --- a/htroot/yacysearchitem.java +++ b/htroot/yacysearchitem.java @@ -116,6 +116,11 @@ public class yacysearchitem { } prop.put("content", 1); // switch on specific content + prop.put("content_showDate", sb.getConfigBool("search.result.show.date", true) ? 1 : 0); + prop.put("content_showSize", sb.getConfigBool("search.result.show.size", true) ? 1 : 0); + prop.put("content_showMetadata", sb.getConfigBool("search.result.show.metadata", true) ? 1 : 0); + prop.put("content_showParser", sb.getConfigBool("search.result.show.parser", true) ? 1 : 0); + prop.put("content_showPictures", sb.getConfigBool("search.result.show.pictures", true) ? 1 : 0); prop.put("content_authorized", authenticated ? "1" : "0"); prop.put("content_authorized_recommend", (sb.peers.newsPool.getSpecific(yacyNewsPool.OUTGOING_DB, yacyNewsPool.CATEGORY_SURFTIPP_ADD, "url", result.urlstring()) == null) ? "1" : "0"); prop.putHTML("content_authorized_recommend_deletelink", "/yacysearch.html?query=" + theQuery.queryString.replace(' ', '+') + "&Enter=Search&count=" + theQuery.displayResults() + "&offset=" + (theQuery.neededResults() - theQuery.displayResults()) + "&order=" + crypt.simpleEncode(theQuery.ranking.toExternalString()) + "&resource=local&time=3&deleteref=" + new String(result.hash()) + "&urlmaskfilter=.*"); @@ -126,17 +131,21 @@ public class yacysearchitem { prop.putXML("content_title-xml", result.title()); prop.putJSON("content_title-json", result.title()); prop.putHTML("content_link", result.urlstring()); + prop.putHTML("content_showPictures_link", result.urlstring()); prop.putHTML("content_target", target); if (faviconURL != null && isHtml) sb.loader.loadIfNotExistBackground(faviconURL.toNormalform(true, false), 1024 * 1024 * 10); prop.putHTML("content_faviconCode", sb.licensedURLs.aquireLicense(faviconURL)); // acquire license for favicon url loading prop.put("content_urlhash", resulthashString); + prop.put("content_showMetadata_urlhash", resulthashString); + prop.put("content_showParser_urlhash", resulthashString); prop.put("content_urlhexhash", yacySeed.b64Hash2hexHash(resulthashString)); prop.putHTML("content_urlname", nxTools.shortenURLString(result.urlname(), urllength)); - prop.put("content_date", GenericFormatter.RFC1123_SHORT_FORMATTER.format(result.modified())); + prop.put("content_showDate_date", GenericFormatter.RFC1123_SHORT_FORMATTER.format(result.modified())); prop.put("content_date822", HeaderFramework.formatRFC1123(result.modified())); //prop.put("content_ybr", RankingProcess.ybr(result.hash())); prop.putHTML("content_size", Integer.toString(result.filesize())); // we don't use putNUM here because that number shall be usable as sorting key. To print the size, use 'sizename' prop.putHTML("content_sizename", sizename(result.filesize())); + prop.putHTML("content_showSize_sizename", sizename(result.filesize())); prop.putHTML("content_host", resultURL.getHost() == null ? "" : resultURL.getHost()); prop.putHTML("content_file", resultURL.getFile()); prop.putHTML("content_path", resultURL.getPath()); @@ -148,7 +157,9 @@ public class yacysearchitem { String s = ""; for (String t: query[0]) s += "+" + t; if (s.length() > 0) s = s.substring(1); prop.putHTML("content_words", s); + prop.putHTML("content_showParser_words", s); prop.putHTML("content_former", theQuery.queryString); + prop.putHTML("content_showPictures_former", theQuery.queryString); final TextSnippet snippet = result.textSnippet(); final String desc = (snippet == null) ? "" : snippet.getLineMarked(theQuery.fullqueryHashes); prop.put("content_description", desc); diff --git a/source/de/anomic/server/serverObjects.java b/source/de/anomic/server/serverObjects.java index 0b553ae5c..d324bb99d 100644 --- a/source/de/anomic/server/serverObjects.java +++ b/source/de/anomic/server/serverObjects.java @@ -299,6 +299,13 @@ public class serverObjects extends HashMap implements Cloneable return dflt; } } + + public boolean getBoolean(final String key, final boolean dflt) { + String s = removeBOM(super.get(key)); + if (s == null) return dflt; + s = s.toLowerCase(); + return s.equals("true") || s.equals("on") || s.equals("1"); + } public boolean hasValue(final String key) { final String s = super.get(key); diff --git a/source/net/yacy/kelondro/blob/ArrayStack.java b/source/net/yacy/kelondro/blob/ArrayStack.java index 87fa765c4..8c17b63ef 100755 --- a/source/net/yacy/kelondro/blob/ArrayStack.java +++ b/source/net/yacy/kelondro/blob/ArrayStack.java @@ -269,11 +269,11 @@ public class ArrayStack implements BLOB { return f; } - public synchronized File[] unmountBestMatch(double maxq, long maxResultSize) { + public synchronized File[] unmountBestMatch(float maxq, long maxResultSize) { if (this.blobs.size() < 2) return null; long l, r; File lf, rf; - double min = Double.MAX_VALUE; + float min = Float.MAX_VALUE; File[] bestMatch = new File[2]; maxResultSize = maxResultSize >> 1; int loopcount = 0; @@ -285,13 +285,13 @@ public class ArrayStack implements BLOB { l = 1 + (lf.length() >> 1); r = 1 + (rf.length() >> 1); if (l + r > maxResultSize) continue; - double q = Math.max((double) l, (double) r) / Math.min((double) l, (double) r); + float q = Math.max((float) l, (float) r) / Math.min((float) l, (float) r); if (q < min) { min = q; bestMatch[0] = lf; bestMatch[1] = rf; } - if (loopcount > 1000 && min <= maxq && min != Double.MAX_VALUE) break mainloop; + if (loopcount > 1000 && min <= maxq && min != Float.MAX_VALUE) break mainloop; } } if (min > maxq) return null; diff --git a/source/net/yacy/kelondro/rwi/ReferenceContainerArray.java b/source/net/yacy/kelondro/rwi/ReferenceContainerArray.java index dbdbf251f..5eb655ff4 100644 --- a/source/net/yacy/kelondro/rwi/ReferenceContainerArray.java +++ b/source/net/yacy/kelondro/rwi/ReferenceContainerArray.java @@ -317,7 +317,7 @@ public final class ReferenceContainerArray { // first try to merge small files that match while (this.merger.queueLength() < 3 || this.array.entries() >= 50) { - File[] ff = this.array.unmountBestMatch(2.0, targetFileSize); + File[] ff = this.array.unmountBestMatch(2.0f, targetFileSize); if (ff == null) break; Log.logInfo("RICELL-shrink1", "unmountBestMatch(2.0, " + targetFileSize + ")"); merger.merge(ff[0], ff[1], this.factory, this.array, this.payloadrow, newContainerBLOBFile()); @@ -335,7 +335,7 @@ public final class ReferenceContainerArray { // if there is no small file, then merge matching files up to limit while (this.merger.queueLength() < 1) { - File[] ff = this.array.unmountBestMatch(2.0, maxFileSize); + File[] ff = this.array.unmountBestMatch(2.0f, maxFileSize); if (ff == null) break; Log.logInfo("RICELL-shrink3", "unmountBestMatch(2.0, " + maxFileSize + ")"); merger.merge(ff[0], ff[1], this.factory, this.array, this.payloadrow, newContainerBLOBFile());