Author: gttersen
Date: 2007-04-30 21:10:24 +0200 (Mon, 30 Apr 2007)
New Revision: 4929

Modified:
   
trunk/core-api/src/main/java/no/schibstedsok/searchportal/mode/SearchModeFactory.java
   
trunk/core-api/src/main/java/no/schibstedsok/searchportal/mode/command/ClusteringESPFastCommand.java
   
trunk/core-api/src/main/java/no/schibstedsok/searchportal/mode/command/NewsEspSearchCommand.java
   
trunk/core-api/src/main/java/no/schibstedsok/searchportal/mode/command/NewsMyNewsSearchCommand.java
   
trunk/query-transform-config-spi/src/main/java/no/schibstedsok/searchportal/query/transform/NewsClusterQueryTransformerConfig.java
   
trunk/query-transform-control-spi/src/main/java/no/schibstedsok/searchportal/query/transform/NewsClusterQueryTransformer.java
   
trunk/query-transform-control-spi/src/main/java/no/schibstedsok/searchportal/query/transform/NewsMyNewsQueryTransformer.java
   
trunk/search-command-config-spi/src/main/java/no/schibstedsok/searchportal/mode/config/NewsEspCommandConfig.java
Log:
newsAggregator changes

Modified: 
trunk/core-api/src/main/java/no/schibstedsok/searchportal/mode/SearchModeFactory.java
===================================================================
--- 
trunk/core-api/src/main/java/no/schibstedsok/searchportal/mode/SearchModeFactory.java
       2007-04-30 15:06:42 UTC (rev 4928)
+++ 
trunk/core-api/src/main/java/no/schibstedsok/searchportal/mode/SearchModeFactory.java
       2007-04-30 19:10:24 UTC (rev 4929)
@@ -695,6 +695,7 @@
                     fillBeanProperty(nesc, inherit, "mediumParameter", 
ParseType.String, commandE, "medium");
                     fillBeanProperty(nesc, inherit, "nestedResultsField", 
ParseType.String, commandE, "entries");
                     fillBeanProperty(nesc, inherit, "collapsingMaxFetch", 
ParseType.Int, commandE, "10");
+                    fillBeanProperty(nesc, inherit, "ignoreOffset", 
ParseType.Boolean, commandE, "false");
                 }
 
                 if (sc instanceof ClusteringEspFastCommandConfig) {

Modified: 
trunk/core-api/src/main/java/no/schibstedsok/searchportal/mode/command/ClusteringESPFastCommand.java
===================================================================
--- 
trunk/core-api/src/main/java/no/schibstedsok/searchportal/mode/command/ClusteringESPFastCommand.java
        2007-04-30 15:06:42 UTC (rev 4928)
+++ 
trunk/core-api/src/main/java/no/schibstedsok/searchportal/mode/command/ClusteringESPFastCommand.java
        2007-04-30 19:10:24 UTC (rev 4929)
@@ -19,8 +19,6 @@
 import java.io.IOException;
 
 public class ClusteringESPFastCommand extends NewsEspSearchCommand {
-    public static final String PARAM_NEXT_OFFSET = "nextOffset";
-
     private static final Logger LOG = 
Logger.getLogger(ClusteringESPFastCommand.class);
 
     public ClusteringESPFastCommand(Context cxt) {
@@ -104,7 +102,8 @@
         SearchResult subResult = null;
 
         LOG.debug("HitCount=" + result.getDocCount() + ", clusterField=" + 
clusterField + ", nestedResultsField=" + nestedResultsField + ", offset=" + 
offset);
-        for (int i = offset; i < result.getDocCount(); i++) {
+        final int firstHit = config.isIgnoreOffset() ? 0 : offset;
+        for (int i = firstHit; i < result.getDocCount(); i++) {
             try {
                 final IDocumentSummary document = result.getDocument(i + 1);
                 currentClusterId = document.getSummaryField(clusterField);
@@ -113,7 +112,6 @@
                         lastClusterId.isEmpty() ||
                         currentClusterId.getStringValue().equals("0") ||
                         
(!currentClusterId.getStringValue().equals(lastClusterId.getStringValue()))) {
-                    collectedClusters++;
                     LOG.debug("Adding new cluster: " + currentClusterId + ", 
count is: " + collectedClusters);
                     if (collectedClusters < maxClusterCount) {
                         clusterEntry = addResult(config, searchResult, 
document);
@@ -124,6 +122,7 @@
                     } else {
                         break;
                     }
+                    collectedClusters++;
                     subResult = null;
                 } else {
                     LOG.debug("Adding subResult for: " + 
currentClusterId.getStringValue());

Modified: 
trunk/core-api/src/main/java/no/schibstedsok/searchportal/mode/command/NewsEspSearchCommand.java
===================================================================
--- 
trunk/core-api/src/main/java/no/schibstedsok/searchportal/mode/command/NewsEspSearchCommand.java
    2007-04-30 15:06:42 UTC (rev 4928)
+++ 
trunk/core-api/src/main/java/no/schibstedsok/searchportal/mode/command/NewsEspSearchCommand.java
    2007-04-30 19:10:24 UTC (rev 4929)
@@ -2,6 +2,7 @@
 
 import com.fastsearch.esp.search.query.BaseParameter;
 import com.fastsearch.esp.search.query.IQuery;
+import com.fastsearch.esp.search.query.SearchParameter;
 import com.fastsearch.esp.search.result.EmptyValueException;
 import com.fastsearch.esp.search.result.IDocumentSummary;
 import com.fastsearch.esp.search.result.IDocumentSummaryField;
@@ -28,6 +29,7 @@
 import java.util.Map;
 
 public class NewsEspSearchCommand extends NavigatableESPFastCommand {
+    public static final String PARAM_NEXT_OFFSET = "nextOffset";
     private static final Logger LOG = 
Logger.getLogger(NewsEspSearchCommand.class);
 
     public NewsEspSearchCommand(Context cxt) {
@@ -40,6 +42,9 @@
         super.modifyQuery(query);
         final NewsEspCommandConfig config = getSearchConfiguration();
         query.setParameter(BaseParameter.HITS, 
Math.max(config.getCollapsingMaxFetch(), config.getResultsToReturn()));
+        if (config.isIgnoreOffset()) {
+            query.setParameter(new SearchParameter(BaseParameter.OFFSET, 0));
+        }
     }
 
     @Override
@@ -142,7 +147,8 @@
         searchResult.setHitCount(result.getDocCount());
         int collectedHits = 0;
         int analyzedHits = 0;
-        for (int i = offset; i < result.getDocCount() && analyzedHits < 
config.getCollapsingMaxFetch(); i++) {
+        final int firstHit = config.isIgnoreOffset() ? 0 : offset;
+        for (int i = firstHit; i < result.getDocCount() && analyzedHits < 
config.getCollapsingMaxFetch(); i++) {
             try {
                 final IDocumentSummary document = result.getDocument(i + 1);
                 final String collapseId = 
document.getSummaryField("collapseid").getStringValue();
@@ -172,7 +178,7 @@
             }
         }
         if (offset + collectedHits < result.getDocCount()) {
-            searchResult.addField(ClusteringESPFastCommand.PARAM_NEXT_OFFSET, 
Integer.toString(offset + collectedHits));
+            searchResult.addField(NewsEspSearchCommand.PARAM_NEXT_OFFSET, 
Integer.toString(offset + collectedHits));
         }
         return searchResult;
     }

Modified: 
trunk/core-api/src/main/java/no/schibstedsok/searchportal/mode/command/NewsMyNewsSearchCommand.java
===================================================================
--- 
trunk/core-api/src/main/java/no/schibstedsok/searchportal/mode/command/NewsMyNewsSearchCommand.java
 2007-04-30 15:06:42 UTC (rev 4928)
+++ 
trunk/core-api/src/main/java/no/schibstedsok/searchportal/mode/command/NewsMyNewsSearchCommand.java
 2007-04-30 19:10:24 UTC (rev 4929)
@@ -24,19 +24,27 @@
     }
 
     public SearchResult execute() {
+        NewsMyNewsCommandConfig config = getSearchConfiguration();
         String myNews = (String) 
context.getDataModel().getJunkYard().getValue("myNews");
         LOG.debug("Cookie is: " + myNews);
         if (myNews != null && myNews.length() > 0) {
             final SearchResult mergedResult = new BasicSearchResult(this);
             Matcher matcher = cookiePattern.matcher(myNews);
             int position = 0;
-            int clusterPos = 0;
-            while (matcher.find()) {
+            int offset = getOffset();
+            for (int i = 0; i < offset; i++) {
+                // Forward matcher to correct place in cookie.
+                if (!matcher.find()) {
+                    break;
+                }
+            }
+
+            while (matcher.find() && position < config.getResultsToReturn()) {
                 SearchResult collectedResult;
                 String commandName = null;
                 final String type = matcher.group(2);
                 if (type.equals("knippe")) {
-                    commandName = "clusterMyNews";
+                    commandName = "clusterMyNews" + position;
                 } else if (type.equals("sak")) {
                     commandName = "newsCase" + position;
                 } else if (type.equals("person")) {
@@ -49,20 +57,14 @@
                         LOG.debug("Waiting for " + commandName);
                         collectedResult = 
context.getRunningQuery().getSearchResult(commandName);
                         if (collectedResult != null && 
collectedResult.getResults().size() > 0) {
-                            SearchResultItem searchResultItem;
-                            if (type.equals("knippe") && 
collectedResult.getResults().size() > clusterPos) {
-                                searchResultItem = 
collectedResult.getResults().get(clusterPos);
-                                clusterPos++;
-                            } else {
-                                searchResultItem = 
collectedResult.getResults().get(0);
-                                final int lastSubPos = 
Math.min(collectedResult.getResults().size(), 4);
-                                if (lastSubPos > 1) {
-                                    final SearchResult subSearchResults = new 
BasicSearchResult(this);
-                                    
subSearchResults.setHitCount(collectedResult.getHitCount());
-                                    
searchResultItem.addNestedSearchResult("entries", subSearchResults);
-                                    for (int i = 1; i < lastSubPos; i++) {
-                                        
subSearchResults.addResult(collectedResult.getResults().get(i));
-                                    }
+                            SearchResultItem searchResultItem = 
collectedResult.getResults().get(0);
+                            final int lastSubPos = 
Math.min(collectedResult.getResults().size(), 4);
+                            if (lastSubPos > 1) {
+                                final SearchResult subSearchResults = new 
BasicSearchResult(this);
+                                
subSearchResults.setHitCount(collectedResult.getHitCount());
+                                
searchResultItem.addNestedSearchResult("entries", subSearchResults);
+                                for (int i = 1; i < lastSubPos; i++) {
+                                    
subSearchResults.addResult(collectedResult.getResults().get(i));
                                 }
                             }
                             searchResultItem.addField("type", type);
@@ -80,13 +82,37 @@
                 }
                 position++;
             }
-            mergedResult.setHitCount(position);
+
+            while (matcher.find()) {
+                // count all cookies
+                position++;
+            }
+            mergedResult.setHitCount(position + 1 + offset);
+
+            setNextOffset(mergedResult, config.getResultsToReturn());
+
             return mergedResult;
         } else {
             return new BasicSearchResult(this);
         }
     }
 
+    private void setNextOffset(SearchResult searchResult, int returnedResults) 
{
+        int offset = getOffset();
+        if (offset + returnedResults < searchResult.getHitCount()) {
+            LOG.debug("Setting next offset to: " + (offset + returnedResults));
+            searchResult.addField(NewsEspSearchCommand.PARAM_NEXT_OFFSET, 
Integer.toString(offset + returnedResults));
+        }
+    }
+
+    private int getOffset() {
+        int offset = 0;
+        if (datamodel.getJunkYard().getValue("offset") != null) {
+            offset = Integer.parseInt((String) 
datamodel.getJunkYard().getValue("offset"));
+        }
+        return offset;
+    }
+
     @Override
     public NewsMyNewsCommandConfig getSearchConfiguration() {
         return (NewsMyNewsCommandConfig) super.getSearchConfiguration();

Modified: 
trunk/query-transform-config-spi/src/main/java/no/schibstedsok/searchportal/query/transform/NewsClusterQueryTransformerConfig.java
===================================================================
--- 
trunk/query-transform-config-spi/src/main/java/no/schibstedsok/searchportal/query/transform/NewsClusterQueryTransformerConfig.java
  2007-04-30 15:06:42 UTC (rev 4928)
+++ 
trunk/query-transform-config-spi/src/main/java/no/schibstedsok/searchportal/query/transform/NewsClusterQueryTransformerConfig.java
  2007-04-30 19:10:24 UTC (rev 4929)
@@ -25,7 +25,7 @@
     private String timestampField;
     private String clusterField;
     private String clusterIdField = "clusterId";
-    private int maxAgeInDays = 7;
+    private int maxAgeInDays = 0;
 
     /**
      * @return
@@ -46,6 +46,11 @@
         return clusterIdField;
     }
 
+    /**
+     * I max age is set to 0, No max age is defined.
+     *
+     * @return
+     */
     public int getMaxAgeInDays() {
         return maxAgeInDays;
     }

Modified: 
trunk/query-transform-control-spi/src/main/java/no/schibstedsok/searchportal/query/transform/NewsClusterQueryTransformer.java
===================================================================
--- 
trunk/query-transform-control-spi/src/main/java/no/schibstedsok/searchportal/query/transform/NewsClusterQueryTransformer.java
       2007-04-30 15:06:42 UTC (rev 4928)
+++ 
trunk/query-transform-control-spi/src/main/java/no/schibstedsok/searchportal/query/transform/NewsClusterQueryTransformer.java
       2007-04-30 19:10:24 UTC (rev 4929)
@@ -84,11 +84,13 @@
             
filter.append(config.getClusterField()).append(":").append('\"').append(clusterId).append("\"
 ");
         } else {
             filter.append(config.getClusterField()).append(":range(1,max) ");
-            Calendar calendar = Calendar.getInstance();
-            calendar.setTimeZone(TimeZone.getTimeZone("UTC"));
-            calendar.add(Calendar.DAY_OF_WEEK, -config.getMaxAgeInDays());
-            filter.append("and 
").append(config.getTimestampField()).append(':');
-            
filter.append("range(").append(sdf.format(calendar.getTime())).append(",max)");
+            if (config.getMaxAgeInDays() > 0) {
+                Calendar calendar = Calendar.getInstance();
+                calendar.setTimeZone(TimeZone.getTimeZone("UTC"));
+                calendar.add(Calendar.DAY_OF_WEEK, -config.getMaxAgeInDays());
+                filter.append("and 
").append(config.getTimestampField()).append(':');
+                
filter.append("range(").append(sdf.format(calendar.getTime())).append(",max)");
+            }
         }
         return filter.toString();
     }

Modified: 
trunk/query-transform-control-spi/src/main/java/no/schibstedsok/searchportal/query/transform/NewsMyNewsQueryTransformer.java
===================================================================
--- 
trunk/query-transform-control-spi/src/main/java/no/schibstedsok/searchportal/query/transform/NewsMyNewsQueryTransformer.java
        2007-04-30 15:06:42 UTC (rev 4928)
+++ 
trunk/query-transform-control-spi/src/main/java/no/schibstedsok/searchportal/query/transform/NewsMyNewsQueryTransformer.java
        2007-04-30 19:10:24 UTC (rev 4929)
@@ -40,6 +40,14 @@
         }
     }
 
+    protected int getOffset() {
+        int offset = 0;
+        if (getContext().getDataModel().getJunkYard().getValue("offset") != 
null) {
+            offset = Integer.parseInt((String) 
getContext().getDataModel().getJunkYard().getValue("offset"));
+        }
+        return offset;
+    }
+
     private String transformQuery(String myNews) {
         if (myNews != null && myNews.length() > 0) {
             final Matcher matcher = queryPattern.matcher(myNews);
@@ -64,12 +72,15 @@
                 return newQuery.toString();
             } else {
                 LOG.debug("Position is: " + config.getPosition());
+
                 int curPos = 0;
-                while (matcher.find() && curPos < config.getPosition()) {
+                int offset = getOffset();
+                int pos = config.getPosition() + offset;
+                while (matcher.find() && curPos < pos) {
                     // Just searching for the correct match.
                     curPos++;
                 }
-                LOG.debug("Group at pos: " + config.getPosition() + " is " + 
matcher.group(0) + ", looking for " + config.getType());
+                LOG.debug("Group at pos: " + pos + " is " + matcher.group(0) + 
", looking for " + config.getType());
                 if (matcher.groupCount() > 0 && 
matcher.group(2).equals(config.getType())) {
                     if (config.getFilterField() == null) {
                         return matcher.group(1);

Modified: 
trunk/search-command-config-spi/src/main/java/no/schibstedsok/searchportal/mode/config/NewsEspCommandConfig.java
===================================================================
--- 
trunk/search-command-config-spi/src/main/java/no/schibstedsok/searchportal/mode/config/NewsEspCommandConfig.java
    2007-04-30 15:06:42 UTC (rev 4928)
+++ 
trunk/search-command-config-spi/src/main/java/no/schibstedsok/searchportal/mode/config/NewsEspCommandConfig.java
    2007-04-30 19:10:24 UTC (rev 4929)
@@ -10,6 +10,7 @@
     private String mediumParameter = "medium";
     private String nestedResultsField;
     private int collapsingMaxFetch;
+    private boolean ignoreOffset = false;
 
 
     public NewsEspCommandConfig() {
@@ -79,4 +80,13 @@
     public void setMediumParameter(String mediumParameter) {
         this.mediumParameter = mediumParameter;
     }
+
+    public boolean isIgnoreOffset() {
+        return ignoreOffset;
+    }
+
+    public void setIgnoreOffset(boolean ignoreOffset) {
+        this.ignoreOffset = ignoreOffset;
+    }
+
 }

_______________________________________________
Kernel-commits mailing list
[email protected]
http://sesat.no/mailman/listinfo/kernel-commits

Reply via email to