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

Reply via email to