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
