Author: gttersen
Date: 2007-04-12 20:22:11 +0200 (Thu, 12 Apr 2007)
New Revision: 4800

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/NewsAggregatorSearchCommand.java
   
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/NewsMyNewsQueryTransformerConfig.java
   
trunk/query-transform-control-spi/src/main/java/no/schibstedsok/searchportal/query/transform/NewsCaseQueryTransformer.java
   
trunk/query-transform-control-spi/src/main/java/no/schibstedsok/searchportal/query/transform/NewsMyNewsQueryTransformer.java
Log:
Changes for NewsAggregator

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-12 13:21:47 UTC (rev 4799)
+++ 
trunk/core-api/src/main/java/no/schibstedsok/searchportal/mode/command/ClusteringESPFastCommand.java
        2007-04-12 18:22:11 UTC (rev 4800)
@@ -63,7 +63,7 @@
             if (clusterId == null) {
                 return createClusteredSearchResult(config, result);
             } else {
-                return createSingleClusterResults(config, result, clusterId);
+                return createSingleClusterResults(config, result);
             }
         } catch (IllegalType e) {
             LOG.error("Could not convert result", e);
@@ -77,7 +77,7 @@
     }
 
 
-    private FastSearchResult 
createSingleClusterResults(ClusteringESPFastConfiguration config, IQueryResult 
result, StringDataObject clusterId) throws IllegalType, EmptyValueException {
+    private FastSearchResult 
createSingleClusterResults(ClusteringESPFastConfiguration config, IQueryResult 
result) throws IllegalType, EmptyValueException {
         final String nestedResultsField = config.getNestedResultsField();
         final FastSearchResult searchResult = new FastSearchResult(this);
         final HashMap<String, SearchResultItem> collapseMap = new 
HashMap<String, SearchResultItem>();
@@ -85,7 +85,7 @@
         for (int i = 0; i < result.getDocCount(); i++) {
             try {
                 final IDocumentSummary document = result.getDocument(i + 1);
-                final String collapseId = 
document.getSummaryField("collapseId").getStringValue();
+                final String collapseId = 
document.getSummaryField("collapseid").getStringValue();
                 SearchResultItem parentResult = collapseMap.get(collapseId);
                 if (parentResult == null) {
                     parentResult = addResult(config, searchResult, document);
@@ -119,15 +119,15 @@
         int collectedClusters = 0;
         int collectedHits = 0;
         SearchResultItem clusterEntry = null;
+        SearchResult subResult = null;
 
         LOG.debug("HitCount=" + result.getDocCount() + ", clusterField=" + 
clusterField + ", nestedResultsField=" + nestedResultsField);
 
         for (int i = 0; i < result.getDocCount(); i++) {
-            SearchResult subResult = null;
             try {
                 final IDocumentSummary document = result.getDocument(i + 1);
                 currentClusterId = document.getSummaryField(clusterField);
-                if (currentClusterId.isEmpty() || lastClusterId == null || 
lastClusterId.isEmpty() || (currentClusterId.getIntValue() != 
lastClusterId.getIntValue())) {
+                if (currentClusterId.isEmpty() || lastClusterId == null || 
lastClusterId.isEmpty() || 
(!currentClusterId.getStringValue().equals(lastClusterId.getStringValue()))) {
                     collectedClusters++;
                     LOG.debug("Adding new cluster: " + currentClusterId + ", 
count is: " + collectedClusters);
                     if (collectedClusters < maxClusterCount) {
@@ -139,10 +139,15 @@
                     } else {
                         break;
                     }
+                    subResult = null;
                 } else {
                     LOG.debug("Adding subResult for: " + 
currentClusterId.getStringValue());
                     if (subResult == null) {
                         subResult = new BasicSearchResult(this);
+                        IDocumentSummaryField clusterHitCount = 
document.getSummaryField("fcocount");
+                        if (!clusterHitCount.isEmpty()) {
+                            
subResult.setHitCount(Integer.parseInt(clusterHitCount.getStringValue()));
+                        }
                         clusterEntry.addNestedSearchResult(nestedResultsField, 
subResult);
                     }
                     addResult(config, subResult, document);

Modified: 
trunk/core-api/src/main/java/no/schibstedsok/searchportal/mode/command/NewsAggregatorSearchCommand.java
===================================================================
--- 
trunk/core-api/src/main/java/no/schibstedsok/searchportal/mode/command/NewsAggregatorSearchCommand.java
     2007-04-12 13:21:47 UTC (rev 4799)
+++ 
trunk/core-api/src/main/java/no/schibstedsok/searchportal/mode/command/NewsAggregatorSearchCommand.java
     2007-04-12 18:22:11 UTC (rev 4800)
@@ -91,7 +91,10 @@
         try {
             final NewsAggregatorXmlParser newsAggregatorXmlParser = new 
NewsAggregatorXmlParser();
             final InputStream inputStream = getInputStream(config, xmlFile);
-            return newsAggregatorXmlParser.parseCluster(config, inputStream, 
clusterId.getString(), this);
+            SearchResult searchResult = 
newsAggregatorXmlParser.parseCluster(config, inputStream, 
clusterId.getString(), this);
+            if (searchResult != null && searchResult.getHitCount() > 0) {
+                return searchResult;
+            }
         } catch (IOException e) {
             LOG.debug("Falling back to search instead of xml parse", e);
         } catch (JDOMException e) {
@@ -117,7 +120,10 @@
     private SearchResult getPageResult(NewsAggregatorSearchConfiguration 
config, String xmlFile) {
         final NewsAggregatorXmlParser newsAggregatorXmlParser = new 
NewsAggregatorXmlParser();
         try {
-            return newsAggregatorXmlParser.parseFullPage(config, 
getInputStream(config, xmlFile), this);
+            SearchResult searchResult = 
newsAggregatorXmlParser.parseFullPage(config, getInputStream(config, xmlFile), 
this);
+            if (searchResult != null && searchResult.getHitCount() > 0) {
+                return searchResult;
+            }
         } catch (JDOMException e) {
             LOG.debug("Falling back to search instead of xml parse", e);
         } catch (IOException e) {

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-12 13:21:47 UTC (rev 4799)
+++ 
trunk/query-transform-config-spi/src/main/java/no/schibstedsok/searchportal/query/transform/NewsClusterQueryTransformerConfig.java
  2007-04-12 18:22:11 UTC (rev 4800)
@@ -55,9 +55,12 @@
         paramFields = StringUtils.split(element.getAttribute(PARAM_FIELDS), 
",");
         clusterField = element.getAttribute(CLUSTER_FIELD);
         timestampField = element.getAttribute(TIMESTAMP_FIELD);
-        clusterIdField = element.getAttribute(CLUSTER_ID_FIELD);
+        final String clusterIdField = element.getAttribute(CLUSTER_ID_FIELD);
+        if (clusterIdField != null && clusterIdField.length() > 0) {
+            this.clusterIdField = clusterIdField;
+        }
         final String maxAge = element.getAttribute(MAX_AGE_IN_DAYS);
-        if (maxAge != null) {
+        if (maxAge != null && maxAge.length() > 0) {
             maxAgeInDays = Integer.parseInt(maxAge);
         }
         return this;

Modified: 
trunk/query-transform-config-spi/src/main/java/no/schibstedsok/searchportal/query/transform/NewsMyNewsQueryTransformerConfig.java
===================================================================
--- 
trunk/query-transform-config-spi/src/main/java/no/schibstedsok/searchportal/query/transform/NewsMyNewsQueryTransformerConfig.java
   2007-04-12 13:21:47 UTC (rev 4799)
+++ 
trunk/query-transform-config-spi/src/main/java/no/schibstedsok/searchportal/query/transform/NewsMyNewsQueryTransformerConfig.java
   2007-04-12 18:22:11 UTC (rev 4800)
@@ -5,31 +5,31 @@
 
 @Controller("NewsMyNewsQueryTransformer")
 public class NewsMyNewsQueryTransformerConfig extends 
AbstractQueryTransformerConfig {
-    private String cookieParameter;
-    private String transformExpsession;
-    private static final String COOKIE_PARAMETER = "cookie-parameter";
-    private static final String TRANSFORM_EXPRESSION = "transform-expression";
+    private String filterField;
+    private String type;
+    private static final String TYPE = "type";
+    private static final String FILTER_FIELD = "filter-field";
 
-    public String getCookieParameter() {
-        return cookieParameter;
+    public String getFilterField() {
+        return filterField;
     }
 
-    public void setCookieParameter(String cookieParameter) {
-        this.cookieParameter = cookieParameter;
+    public void setFilterField(String filterField) {
+        this.filterField = filterField;
     }
 
-    public String getTransformExpsession() {
-        return transformExpsession;
+    public String getType() {
+        return type;
     }
 
-    public void setTransformExpsession(String transformExpsession) {
-        this.transformExpsession = transformExpsession;
+    public void setType(String type) {
+        this.type = type;
     }
 
     @Override
     public NewsMyNewsQueryTransformerConfig readQueryTransformer(final Element 
element) {
-        cookieParameter = element.getAttribute(COOKIE_PARAMETER);
-        transformExpsession = element.getAttribute(TRANSFORM_EXPRESSION);
+        filterField = element.getAttribute(FILTER_FIELD);
+        type = element.getAttribute(TYPE);
         return this;
     }
 

Modified: 
trunk/query-transform-control-spi/src/main/java/no/schibstedsok/searchportal/query/transform/NewsCaseQueryTransformer.java
===================================================================
--- 
trunk/query-transform-control-spi/src/main/java/no/schibstedsok/searchportal/query/transform/NewsCaseQueryTransformer.java
  2007-04-12 13:21:47 UTC (rev 4799)
+++ 
trunk/query-transform-control-spi/src/main/java/no/schibstedsok/searchportal/query/transform/NewsCaseQueryTransformer.java
  2007-04-12 18:22:11 UTC (rev 4800)
@@ -2,7 +2,6 @@
 package no.schibstedsok.searchportal.query.transform;
 
 import no.schibstedsok.newsadmin.service.NewsCaseFacadeInterface;
-import no.schibstedsok.searchportal.datamodel.generic.StringDataObjectSupport;
 import no.schibstedsok.searchportal.query.Clause;
 import org.apache.log4j.Logger;
 
@@ -13,9 +12,6 @@
 /**
  * Checks if the query should be transformed from a ejb lookup on the 
queryString. Transformation will replace
  * the whole query.
- * <p/>
- * <b>Note:</b> This queryTransformer ignores all earlier transforms on the 
query. It uses the raw querystring
- * to transform the query. All transforms to the resulting query should be 
done after this.
  */
 public final class NewsCaseQueryTransformer extends AbstractQueryTransformer {
     private final static Logger LOG = 
Logger.getLogger(NewsCaseQueryTransformer.class);
@@ -37,7 +33,9 @@
      */
     public void visitImpl(final Clause clause) {
         
dataAccess.setProperties(getContext().getDataModel().getSite().getSiteConfiguration().getProperties());
-        String transformedQuery = 
dataAccess.getQuery(getContext().getQuery().getQueryString(), 
config.getQueryType());
+        String queryString = getTransformedQueryString();
+        LOG.debug("Original query is: '" + queryString + "'");
+        String transformedQuery = dataAccess.getQuery(queryString, 
config.getQueryType());
         if (transformedQuery == null) {
             transformedQuery = '"' + 
getContext().getQuery().getQueryString().trim() + '"';
         }
@@ -46,13 +44,20 @@
         }
         LOG.debug("New query is: '" + transformedQuery + "'");
         if (transformedQuery.length() > 0) {
-            // TODO: Use junkyard instead.
-            
getContext().getDataModel().getParameters().setValue(config.getQueryType(), new 
StringDataObjectSupport(transformedQuery));
+            
getContext().getDataModel().getJunkYard().setValue(config.getQueryType(), 
transformedQuery);
             
getContext().getTransformedTerms().put(getContext().getQuery().getFirstLeafClause(),
 transformedQuery);
         }
 
     }
 
+    private String getTransformedQueryString() {
+        StringBuilder sb = new StringBuilder();
+        for (Clause keyClause : getContext().getTransformedTerms().keySet()) {
+            
sb.append(getContext().getTransformedTerms().get(keyClause)).append(' ');
+        }
+        return sb.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-12 13:21:47 UTC (rev 4799)
+++ 
trunk/query-transform-control-spi/src/main/java/no/schibstedsok/searchportal/query/transform/NewsMyNewsQueryTransformer.java
        2007-04-12 18:22:11 UTC (rev 4800)
@@ -3,18 +3,62 @@
 import no.schibstedsok.searchportal.query.Clause;
 import org.apache.log4j.Logger;
 
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
+
+/**
+ * Expects a parameter to be on the format: 
((&lt;value&gt;::&lt;type&gt;)(||&lt;value&gt;::&lt;type&gt;)*)?
+ * <p/>
+ * It the type matches the type for this transformer, it will use the value(s) 
to transform to a new query.
+ * <p/>
+ * <b>Note:</b> This queryTransformer ignores all earlier transforms on the 
query. All transforms to the resulting
+ * query should be done after this.
+ */
 public class NewsMyNewsQueryTransformer extends AbstractQueryTransformer {
     private static final Logger LOG = 
Logger.getLogger(NewsMyNewsQueryTransformer.class);
+    private static final Pattern queryPattern = 
Pattern.compile("(?:\\A|\\|)([^\\|]+)\\:{2}([^\\|]+)\\|?");
+
     private NewsMyNewsQueryTransformerConfig config;
 
-
     public NewsMyNewsQueryTransformer(QueryTransformerConfig config) {
         this.config = (NewsMyNewsQueryTransformerConfig) config;
     }
 
     public void visitImpl(final Clause clause) {
-        String myNews = (String) 
getContext().getDataModel().getJunkYard().getValue("myNews");
-        LOG.debug("Transforming query according to cookie myNews = " + myNews);
+        String myNews = getContext().getQuery().getQueryString();
+        LOG.debug("Transforming query according to query = " + myNews);
+        final String transformedQuery = transformQuery(myNews);
+        if (transformedQuery != null) {
+            for (Clause keyClause : 
getContext().getTransformedTerms().keySet()) {
+                getContext().getTransformedTerms().put(keyClause, "");
+            }
+            LOG.debug("New query is: '" + transformedQuery + "'");
+            if (transformedQuery.length() > 0) {
+                
getContext().getTransformedTerms().put(getContext().getQuery().getFirstLeafClause(),
 transformedQuery);
+            }
+        }
     }
+
+    private String transformQuery(String myNews) {
+        if (myNews != null && myNews.length() > 0) {
+            StringBuilder newQuery = new StringBuilder();
+            Matcher matcher = queryPattern.matcher(myNews);
+            while (matcher.find()) {
+                if (matcher.group(2).equals(config.getType())) {
+                    if (newQuery.length() == 0) {
+                        
newQuery.append("filter(").append(config.getFilterField()).append(":or(");
+                    } else {
+                        newQuery.append(',');
+                    }
+                    
newQuery.append('\"').append(matcher.group(1)).append('\"');
+                }
+            }
+            if (newQuery.length() > 0) {
+                newQuery.append("))");
+                return newQuery.toString();
+            }
+        }
+        return null;
+    }
 }

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

Reply via email to