From f05976c0173dff48fc6f78fed98224397e9a1bcc Mon Sep 17 00:00:00 2001 From: reger Date: Sun, 19 Mar 2017 07:12:35 +0100 Subject: [PATCH] Display the local search word statistic in alphabetic order --- htroot/AccessTracker_p.java | 12 +++++------ .../yacy/cora/sorting/OrderedScoreMap.java | 20 +++++++++++++++++-- 2 files changed, 23 insertions(+), 9 deletions(-) diff --git a/htroot/AccessTracker_p.java b/htroot/AccessTracker_p.java index 0651c9c37c..6dcb80c71b 100644 --- a/htroot/AccessTracker_p.java +++ b/htroot/AccessTracker_p.java @@ -40,6 +40,7 @@ import net.yacy.cora.protocol.Domains; import net.yacy.cora.protocol.RequestHeader; import net.yacy.cora.sorting.ConcurrentScoreMap; +import net.yacy.cora.sorting.OrderedScoreMap; import net.yacy.cora.sorting.ScoreMap; import net.yacy.cora.util.CommonPattern; import net.yacy.cora.util.ConcurrentLog; @@ -273,7 +274,7 @@ public static serverObjects respond(final RequestHeader header, final serverObje Date toDate = new Date(); Date fromDate = new Date(toDate.getTime() - 7 * 24 * 3600 * 1000); // 7 Days earlier List evList = AccessTracker.readLog(AccessTracker.getDumpFile(), fromDate, toDate); - ScoreMap topicNavigator = new ConcurrentScoreMap(); + OrderedScoreMap topicNavigator = new OrderedScoreMap(String.CASE_INSENSITIVE_ORDER); for (EventTracker.Event ev : evList) { String qs = ev.payload.toString(); if (qs.startsWith("qs ")) { // currently only raw querystring "qs" lines are included @@ -290,22 +291,19 @@ public static serverObjects respond(final RequestHeader header, final serverObje prop.put("page_nav-topics", "0"); } else { // topics navigator - final int TOPWORDS_MAXCOUNT = 20; + final int TOPWORDS_MAXCOUNT = 25; final int TOPWORDS_MINSIZE = 9; final int TOPWORDS_MAXSIZE = 24; int count; prop.put("page_nav-topics", "1"); String name; int i = 0; - int maxcount = 0; - Iterator navigatorIterator = topicNavigator.keys(false); + int maxcount = topicNavigator.getMaxScore(); + Iterator navigatorIterator = topicNavigator.iterator(); while (i < TOPWORDS_MAXCOUNT && navigatorIterator.hasNext()) { name = navigatorIterator.next(); count = topicNavigator.get(name); - if (maxcount == 0) { - maxcount = count; - } prop.put("page_nav-topics_element_" + i + "_on", 1); prop.put("page_nav-topics_element_" + i + "_name", name); prop.put("page_nav-topics_element_" + i + "_count", count); diff --git a/source/net/yacy/cora/sorting/OrderedScoreMap.java b/source/net/yacy/cora/sorting/OrderedScoreMap.java index b2946e9fa7..86c6d7faca 100644 --- a/source/net/yacy/cora/sorting/OrderedScoreMap.java +++ b/source/net/yacy/cora/sorting/OrderedScoreMap.java @@ -227,12 +227,28 @@ private int getMinScore() { int minScore = Integer.MAX_VALUE; synchronized (this.map) { for (final Map.Entry entry: this.map.entrySet()) if (entry.getValue().intValue() < minScore) { - minScore = entry.getValue().intValue(); + minScore = entry.getValue().intValue(); + } } - } return minScore; } + /** + * @return largest score value + */ + public int getMaxScore() { + if (this.map.isEmpty()) { + return -1; + } + int maxScore = Integer.MIN_VALUE; + for (final Map.Entry entry : this.map.entrySet()) { + if (entry.getValue().intValue() > maxScore) { + maxScore = entry.getValue().intValue(); + } + } + return maxScore; + } + @Override public Iterator keys(final boolean up) { synchronized (this.map) {