Author: ssenrogn
Date: 2008-05-14 13:39:51 +0200 (Wed, 14 May 2008)
New Revision: 6619

Modified:
   
branches/2.17/generic.sesam/search-command-config/src/main/java/no/sesat/search/mode/config/NewsEspCommandConfig.java
   
branches/2.17/generic.sesam/search-command-control/fast/src/main/java/no/sesat/search/mode/command/NewsEspSearchCommand.java
Log:
RESOLVED - SKER4745:
Support for different rank profiles on single and multiple term searches

http://sesat.no/scarab/issues/id/SKER4745

Modified: 
branches/2.17/generic.sesam/search-command-config/src/main/java/no/sesat/search/mode/config/NewsEspCommandConfig.java
===================================================================
--- 
branches/2.17/generic.sesam/search-command-config/src/main/java/no/sesat/search/mode/config/NewsEspCommandConfig.java
       2008-05-14 10:26:06 UTC (rev 6618)
+++ 
branches/2.17/generic.sesam/search-command-config/src/main/java/no/sesat/search/mode/config/NewsEspCommandConfig.java
       2008-05-14 11:39:51 UTC (rev 6619)
@@ -16,30 +16,46 @@
  */
 package no.sesat.search.mode.config;
 
-import no.sesat.search.mode.config.*;
 import no.sesat.search.mode.SearchModeFactory.Context;
 import no.sesat.search.mode.config.CommandConfig.Controller;
 import no.sesat.search.site.config.AbstractDocumentFactory;
 import no.sesat.search.site.config.AbstractDocumentFactory.ParseType;
+
 import org.w3c.dom.Element;
 
-/** Configuration for a NewsEspSearchCommand
- * @author geir
+/**
+ * Configuration for a NewsEspSearchCommand.
+ *
  * @version $Id$
  */
 @Controller("NewsEspSearchCommand")
 public class NewsEspCommandConfig extends NavigatableEspFastCommandConfig {
+
+    private static final long serialVersionUID = -8717500908531092289L;
+
     /** Constant for medium value representing all mediums. */
     public static final String ALL_MEDIUMS = "all";
+
     private String mediumPrefix = "medium";
     private String defaultMedium = "webnewsarticle";
     private String mediumParameter = "medium";
+
     private String nestedResultsField;
     private int collapsingMaxFetch;
+
+    /** Name of the sort parameter used in the url. */
     private String userSortParameter;
+    /** Sort field used when sort is not relevance. */
     private String sortField;
+    /** Default sort direction if no sort is configured. */
     private String defaultSort;
+    /** Sort field to use when relevance sort is used. */
     private String relevanceSortField;
+    /** Sort field that can override <code>relevanceSortField</code> in a 
single term search. */
+    private String relevanceSingleTermSortField;
+    /** Sort field that can override <code>relevanceSortField</code> in a 
multiple term search. */
+    private String relevanceMultipleTermSortField;
+
     private String maxAge;
     private int maxAgeAmount;
     private String ageField;
@@ -131,15 +147,15 @@
         this.mediumPrefix = mediumPrefix;
     }
 
-    /**
-     * @return
+    /** Getter for the defaultMedium property.
+     * @return the defaultMedium value
      */
     public String getDefaultMedium() {
         return defaultMedium;
     }
 
-    /**
-     * @param defaultMedium
+    /** Setter for the defaultMedium property.
+     * @param defaultMedium the new defaultMedium value
      */
     public void setDefaultMedium(final String defaultMedium) {
         this.defaultMedium = defaultMedium;
@@ -173,6 +189,34 @@
         this.relevanceSortField = relevanceSortField;
     }
 
+    /** Getter for the relevanceSingleTermSortField property.
+     * @return the relevanceSortSingleTermField value
+     */
+    public String getRelevanceSingleTermSortField() {
+        return relevanceSingleTermSortField;
+    }
+
+    /** Setter for the relevanceSingleTermSortField property.
+     * @param relevanceSingleTermSortField the new 
relevanceSingleTermSortField value
+     */
+    public void setRelevanceSingleTermSortField(final String 
relevanceSingleTermSortField) {
+        this.relevanceSingleTermSortField = relevanceSingleTermSortField;
+    }
+
+    /** Getter for the relevanceMultipleTermSortField property.
+     * @return the relevanceMultipleTermSortField value
+     */
+    public String getRelevanceMultipleTermSortField() {
+        return relevanceMultipleTermSortField;
+    }
+
+    /** Setter for the relevanceMultipleTermSortField property.
+     * @param relevanceMultipleTermSortField the new 
relevanceMultipleTermSortField value
+     */
+    public void setRelevanceMultipleTermSortField(final String 
relevanceMultipleTermSortField) {
+        this.relevanceMultipleTermSortField = relevanceMultipleTermSortField;
+    }
+
     /** Getter for the maxAge property.
      * @return the maxAge value
      */
@@ -230,24 +274,35 @@
 
         super.readSearchConfiguration(element, inherit, context);
 
-        AbstractDocumentFactory
-                .fillBeanProperty(this, inherit, "mediumPrefix", 
ParseType.String, element, "medium");
-        AbstractDocumentFactory
-                .fillBeanProperty(this, inherit, "defaultMedium", 
ParseType.String, element, "webnewsarticle");
-        AbstractDocumentFactory
-                .fillBeanProperty(this, inherit, "mediumParameter", 
ParseType.String, element, "medium");
-        AbstractDocumentFactory
-                .fillBeanProperty(this, inherit, "nestedResultsField", 
ParseType.String, element, "entries");
-        AbstractDocumentFactory
-                .fillBeanProperty(this, inherit, "collapsingMaxFetch", 
ParseType.Int, element, "10");
+        AbstractDocumentFactory.fillBeanProperty(
+                this, inherit, "mediumPrefix", ParseType.String, element, 
"medium");
+        AbstractDocumentFactory.fillBeanProperty(
+                this, inherit, "defaultMedium", ParseType.String, element, 
"webnewsarticle");
+        AbstractDocumentFactory.fillBeanProperty(
+                this, inherit, "mediumParameter", ParseType.String, element, 
"medium");
+        AbstractDocumentFactory.fillBeanProperty(
+                this, inherit, "nestedResultsField", ParseType.String, 
element, "entries");
+        AbstractDocumentFactory.fillBeanProperty(
+                this, inherit, "collapsingMaxFetch", ParseType.Int, element, 
"10");
 
-        AbstractDocumentFactory.fillBeanProperty(this, inherit, "sortField", 
ParseType.String, element, "publishedtime");
-        AbstractDocumentFactory.fillBeanProperty(this, inherit, "defaultSort", 
ParseType.String, element, "descending");
-        AbstractDocumentFactory.fillBeanProperty(this, inherit, 
"userSortParameter", ParseType.String, element, "sort");
-        AbstractDocumentFactory.fillBeanProperty(this, inherit, 
"relevanceSortField", ParseType.String, element, "freshnessprofile");
-        AbstractDocumentFactory.fillBeanProperty(this, inherit, "maxAge", 
ParseType.String, element, null);
-        AbstractDocumentFactory.fillBeanProperty(this, inherit, "ageField", 
ParseType.String, element, "publishedtime");
+        AbstractDocumentFactory.fillBeanProperty(
+                this, inherit, "sortField", ParseType.String, element, 
"publishedtime");
+        AbstractDocumentFactory.fillBeanProperty(
+                this, inherit, "defaultSort", ParseType.String, element, 
"descending");
+        AbstractDocumentFactory.fillBeanProperty(
+                this, inherit, "userSortParameter", ParseType.String, element, 
"sort");
+        AbstractDocumentFactory.fillBeanProperty(
+                this, inherit, "relevanceSortField", ParseType.String, 
element, "freshnessprofile");
+        AbstractDocumentFactory.fillBeanProperty(
+                this, inherit, "relevanceSingleTermSortField", 
ParseType.String, element, "");
+        AbstractDocumentFactory.fillBeanProperty(
+                this, inherit, "relevanceMultipleTermSortField", 
ParseType.String, element, "");
 
+        AbstractDocumentFactory.fillBeanProperty(
+                this, inherit, "maxAge", ParseType.String, element, null);
+        AbstractDocumentFactory.fillBeanProperty(
+                this, inherit, "ageField", ParseType.String, element, 
"publishedtime");
+
         // maxAge is of the format 10h (for 10 hours).
         if (maxAge != null) {
             ageSymbol = maxAge.charAt(maxAge.length() - 1);

Modified: 
branches/2.17/generic.sesam/search-command-control/fast/src/main/java/no/sesat/search/mode/command/NewsEspSearchCommand.java
===================================================================
--- 
branches/2.17/generic.sesam/search-command-control/fast/src/main/java/no/sesat/search/mode/command/NewsEspSearchCommand.java
        2008-05-14 10:26:06 UTC (rev 6618)
+++ 
branches/2.17/generic.sesam/search-command-control/fast/src/main/java/no/sesat/search/mode/command/NewsEspSearchCommand.java
        2008-05-14 11:39:51 UTC (rev 6619)
@@ -33,7 +33,6 @@
 import no.sesat.search.query.NotClause;
 import no.sesat.search.query.OperationClause;
 import no.sesat.search.query.OrClause;
-import no.sesat.search.query.UrlClause;
 import no.sesat.search.query.Visitor;
 import no.sesat.search.query.XorClause;
 import no.sesat.search.result.BasicResultList;
@@ -45,14 +44,14 @@
 
 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;
 import com.fastsearch.esp.search.result.IQueryResult;
 import com.fastsearch.esp.search.result.IllegalType;
 
-/** Navigatable ESP search command for news.
+/**
+ * Navigatable ESP search command for news.
  * @todo documentation what additional functionality actually amounts to it 
benefitting news verticals.
  *
  * @author Geir H. Pettersen (T-Rank)
@@ -82,21 +81,32 @@
 
     @Override
     protected void modifyQuery(final IQuery query) {
+        super.modifyQuery(query);
 
-        super.modifyQuery(query);
         final NewsEspCommandConfig config = getSearchConfiguration();
 
-        // Because of a bug in FAST ESP5 related to collapsing and sorting, we 
must use sort direcetion,
-        // and not the +fieldname syntax
+        // @TODO: There are some mixing of sort field and sort direction that 
should have been cleaned up
+
+        // Because of a bug in FAST ESP5 related to collapsing and sorting, we 
must use sort direction,
+        // and not the + field name syntax
         final StringDataObject sort = 
datamodel.getParameters().getValue(config.getUserSortParameter());
         String sortType;
+
         if (sort != null) {
             sortType = sort.getString();
         } else {
             sortType = config.getDefaultSort();
         }
+
         if (sortType.equals("relevance")) {
-            query.setParameter(BaseParameter.SORT_BY, 
config.getRelevanceSortField());
+            if (getQuery().getTermCount() == 1 && 
!"".equals(config.getRelevanceSingleTermSortField())) {
+                query.setParameter(BaseParameter.SORT_BY, 
config.getRelevanceSingleTermSortField());
+            } else if (getQuery().getTermCount() > 1 && 
!"".equals(config.getRelevanceMultipleTermSortField())) {
+                query.setParameter(BaseParameter.SORT_BY, 
config.getRelevanceMultipleTermSortField());
+            } else {
+                query.setParameter(BaseParameter.SORT_BY, 
config.getRelevanceSortField());
+            }
+
             query.setParameter(BaseParameter.SORT_DIRECTION, "descending");
         } else {
             query.setParameter(BaseParameter.SORT_BY, config.getSortField());
@@ -128,7 +138,6 @@
                     break;
                 default:
                     throw new IllegalArgumentException("Unknown age symbol " + 
config.getAgeSymbol());
-
             }
 
             final String latestDate = new 
SimpleDateFormat(FAST_DATE_FORMAT).format(cal.getTime());
@@ -144,6 +153,7 @@
             if (query.getQueryString().length() > 0) {
                 q.append(")");
             }
+
             query.setQueryString(q.toString());
         }
     }

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

Reply via email to