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:
((<value>::<type>)(||<value>::<type>)*)?
+ * <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