Author: daniele
Date: 2007-02-21 20:48:04 +0100 (Wed, 21 Feb 2007)
New Revision: 4498
Modified:
trunk/core-api/src/main/java/no/schibstedsok/searchportal/mode/command/CatalogueSearchCommand.java
Log:
first attempt to write a visitor parser for the GEO query parameter.
Modified:
trunk/core-api/src/main/java/no/schibstedsok/searchportal/mode/command/CatalogueSearchCommand.java
===================================================================
---
trunk/core-api/src/main/java/no/schibstedsok/searchportal/mode/command/CatalogueSearchCommand.java
2007-02-21 19:18:30 UTC (rev 4497)
+++
trunk/core-api/src/main/java/no/schibstedsok/searchportal/mode/command/CatalogueSearchCommand.java
2007-02-21 19:48:04 UTC (rev 4498)
@@ -8,6 +8,7 @@
import java.util.Iterator;
import java.util.List;
import java.util.Map;
+import java.util.Set;
import no.fast.ds.search.ISearchParameters;
import no.fast.ds.search.SearchParameter;
@@ -15,11 +16,15 @@
import no.schibstedsok.searchportal.query.AndNotClause;
import no.schibstedsok.searchportal.query.Clause;
import no.schibstedsok.searchportal.query.DefaultOperatorClause;
+import no.schibstedsok.searchportal.query.DoubleOperatorClause;
import no.schibstedsok.searchportal.query.LeafClause;
import no.schibstedsok.searchportal.query.NotClause;
import no.schibstedsok.searchportal.query.OperationClause;
import no.schibstedsok.searchportal.query.OrClause;
import no.schibstedsok.searchportal.query.Query;
+import no.schibstedsok.searchportal.query.XorClause;
+import no.schibstedsok.searchportal.query.parser.AbstractReflectionVisitor;
+import no.schibstedsok.searchportal.query.token.TokenPredicate;
import no.schibstedsok.searchportal.result.BasicSearchResultItem;
import no.schibstedsok.searchportal.result.CatalogueSearchResultItem;
import no.schibstedsok.searchportal.result.FastSearchResult;
@@ -47,59 +52,51 @@
public CatalogueSearchCommand(final Context cxt, final Map parameters) {
super(cxt, parameters);
+
// hvis "where" parametern er sendt inn, så tar vi og leser inn query
fra
// den.
if(getSingleParameter("where") != null){
final ReconstructedQuery rq =
createQuery(getSingleParameter("where"));
- final Query query = rq.getQuery();
-
- queryTwo = query.getQueryString();
+
+ GeoVisitor geo = new GeoVisitor();
+ geo.visit(rq.getQuery().getRootClause());
+
+ queryTwo = geo.getQueryRepresentation();
+ LOG.info("Dette ble det: "+queryTwo);
}
- if(getSingleParameter("companyid")!=null){
- searchForInfoPage=true;
- }
-
if(getSingleParameter("userSortBy")!=null
&& getSingleParameter("userSortBy").length()>0){
sortBy=getSingleParameter("userSortBy");
- }
-
-
+ }
+
+
}
/** TODO comment me. **/
public SearchResult execute() {
- LOG.debug("execute()");
-
- // hvis det er keyword sortering, skal vi
- // først kjøre keyword søket.
- if(sortBy.equals("kw")){
- searchForName=false;
- }else{
- searchForName=true;
- }
+ // kjør søk for keyword.
+ searchForName=false;
super.performQueryTransformation();
- LOG.info("1. Search, "+getTransformedQuery());
SearchResult result = super.execute();
- // hvis det er sortert etter Keyword, et det
- // navnsøk vi skal kjøre her.
+ searchForName=true;
+ super.performQueryTransformation();
+ // søk etter firmanavn
+ SearchResult nameQueryResult = super.execute();
+
+ // hvis det er angitt at det er sortert på navn,
+ // viser vi treff på navn først. Hvis det er angitt att
+ // det skal sorteres på keywords, viser vi keywords først.
if(sortBy.equals("kw")){
- searchForName=true;
+ result.getResults().addAll(nameQueryResult.getResults());
+
result.setHitCount(result.getHitCount()+nameQueryResult.getHitCount());
}else{
- searchForName=false;
+ nameQueryResult.getResults().addAll(result.getResults());
+
nameQueryResult.setHitCount(result.getHitCount()+nameQueryResult.getHitCount());
}
- super.performQueryTransformation();
- LOG.info("2. Search, "+getTransformedQuery());
+
- // søk etter firmanavn
- SearchResult nameQueryResult = super.execute();
-
- // legg til navnsøk.
- result.getResults().addAll(nameQueryResult.getResults());
- result.setHitCount(result.getHitCount()+nameQueryResult.getHitCount());
-
// konverter til denne.
List<CatalogueSearchResultItem> nyResultListe = new
ArrayList<CatalogueSearchResultItem>();
@@ -127,14 +124,16 @@
return result;
}
+
@Override
- protected String getAdditionalFilter() {
- String query=null;
+ public String getTransformedQuery() {
+ String query = super.getTransformedQuery();
- // hvis det finnes en ekstra query, legg til denne i søket som
et filter.
- query = queryTwo!=null&&queryTwo.length()>0 ? "
+iypcfgeo:\""+queryTwo.trim()+"\"" : "";
-
- return query;
+ if(queryTwo!=null&&queryTwo.length()>0){
+ query += " " + QL_AND +" (" + queryTwo+")";
+ }
+
+ return query;
}
/**
@@ -173,4 +172,84 @@
return sortBy;
}
+
+
+ /**
+ * Query builder for creating a query syntax similar to sesam's own.
+ */
+ private final class GeoVisitor extends AbstractReflectionVisitor{
+
+ // AbstractReflectionVisitor overrides
----------------------------------------------
+ private final StringBuilder sb = new StringBuilder();
+
+ /**
+ * Returns the generated query.
+ *
+ * @return The query.
+ */
+ String getQueryRepresentation() {
+ return sb.toString();
+ }
+
+ /**
+ * [EMAIL PROTECTED]
+ */
+ protected void visitImpl(final LeafClause clause) {
+ if(clause.getTerm()!=null && clause.getTerm().length()>0){
+ sb.append("iypcfgeo:"+clause.getTerm());
+ }
+ }
+
+
+ /**
+ * [EMAIL PROTECTED]
+ */
+ protected void visitImpl(final AndClause clause) {
+ clause.getFirstClause().accept(this);
+ sb.append(QL_AND);
+ clause.getSecondClause().accept(this);
+ }
+
+ /**
+ * [EMAIL PROTECTED]
+ */
+ protected void visitImpl(final OrClause clause) {
+ sb.append("(");
+ clause.getFirstClause().accept(this);
+
+ sb.append(QL_OR);
+
+ clause.getSecondClause().accept(this);
+ sb.append(")");
+ }
+
+ /**
+ * [EMAIL PROTECTED]
+ */
+ protected void visitImpl(final DefaultOperatorClause clause) {
+ clause.getFirstClause().accept(this);
+ sb.append(QL_AND);
+ clause.getSecondClause().accept(this);
+ }
+
+ /**
+ * [EMAIL PROTECTED]
+ */
+ protected void visitImpl(final NotClause clause) {
+
+ final String childsTerm = clause.getFirstClause().getTerm();
+ if (childsTerm != null && childsTerm.length() > 0) {
+ sb.append(QL_ANDNOT);
+ clause.getFirstClause().accept(this);
+ }
+ }
+
+ /**
+ * [EMAIL PROTECTED]
+ */
+ protected void visitImpl(final AndNotClause clause) {
+ sb.append(QL_ANDNOT);
+ clause.getFirstClause().accept(this);
+ }
+ }
}
_______________________________________________
Kernel-commits mailing list
[email protected]
http://sesat.no/mailman/listinfo/kernel-commits