Author: ssmiweve
Date: 2009-03-12 15:26:24 +0100 (Thu, 12 Mar 2009)
New Revision: 7222

Modified:
   branches/2.18/query-api/src/main/javacc/QueryParserImpl.jj
   
branches/2.18/search-command-control-spi/src/main/java/no/sesat/search/mode/command/querybuilder/AbstractQueryBuilder.java
   
branches/2.18/search-command-control-spi/src/main/java/no/sesat/search/mode/command/querybuilder/BaseFilterBuilder.java
Log:
- XorClauses weren't applying the field to all children.
- add correct handling of NotClause and AndNotClause.


Modified: branches/2.18/query-api/src/main/javacc/QueryParserImpl.jj
===================================================================
--- branches/2.18/query-api/src/main/javacc/QueryParserImpl.jj  2009-03-12 
12:05:11 UTC (rev 7221)
+++ branches/2.18/query-api/src/main/javacc/QueryParserImpl.jj  2009-03-12 
14:26:24 UTC (rev 7222)
@@ -1,4 +1,4 @@
-/** Copyright (2005-2008) Schibsted Søk AS
+/** Copyright (2005-2009) Schibsted Søk AS
  *   This file is part of SESAT.
  *
  *   SESAT is free software: you can redistribute it and/or modify
@@ -169,7 +169,7 @@
   Clause clause;
   LOG.info("parsing: "+context.getQueryString());
 }{
-        (clause = rootPrecedence()) 
+        (clause = rootPrecedence())
  {
         LOG.info("parsing of " + context.getQueryString() + " resulted in: " + 
clause);
         return clause;
@@ -339,7 +339,8 @@
                 final PhoneNumberClause phClause = 
context.createPhoneNumberClause(term, f);
 
                 // Create a XorClause
-                final QueryParserImpl p = new 
QueryParserImpl(createContext(token.image), PHONE_NUMBER_DISABLED);
+                final String fieldNterm = null == field ? token.image : f + 
':' + token.image;
+                final QueryParserImpl p = new 
QueryParserImpl(createContext(fieldNterm), PHONE_NUMBER_DISABLED);
                 final Clause altClause = p.parse();
                 return context.createXorClause(phClause, altClause, 
XorClause.Hint.PHONE_NUMBER_ON_LEFT);
 
@@ -355,7 +356,8 @@
                 final NumberGroupClause orgClause = 
context.createNumberGroupClause(term, f);
 
                 // Create a XorClause
-                final QueryParserImpl p = new 
QueryParserImpl(createContext(token.image), NUMBER_GROUP_DISABLED);
+                final String fieldNterm = null == field ? token.image : f + 
':' + token.image;
+                final QueryParserImpl p = new 
QueryParserImpl(createContext(fieldNterm), NUMBER_GROUP_DISABLED);
                 final Clause altClause = p.parse();
                 return context.createXorClause(orgClause, altClause, 
XorClause.Hint.NUMBER_GROUP_ON_LEFT);
 
@@ -411,10 +413,12 @@
                 final PhraseClause phClause = 
context.createPhraseClause(token.image, f );
 
                 // Create unphrased query. also strip all operator and skip 
characters out. SKER4723.
+                final String spaceNfield = null == f ? "" : ' ' + f;
                 final String term = token.image
                                         .replaceAll("\"","")
                                         .replaceAll(SKIP_REGEX, " ")
                                         .replaceAll(OPERATOR_REGEX, " ")
+                                        .replaceAll(" +", spaceNfield)
                                         .trim();
 
                 try { // if we can parse the content again, then make an 
xorclause

Modified: 
branches/2.18/search-command-control-spi/src/main/java/no/sesat/search/mode/command/querybuilder/AbstractQueryBuilder.java
===================================================================
--- 
branches/2.18/search-command-control-spi/src/main/java/no/sesat/search/mode/command/querybuilder/AbstractQueryBuilder.java
  2009-03-12 12:05:11 UTC (rev 7221)
+++ 
branches/2.18/search-command-control-spi/src/main/java/no/sesat/search/mode/command/querybuilder/AbstractQueryBuilder.java
  2009-03-12 14:26:24 UTC (rev 7222)
@@ -1,4 +1,4 @@
-/* Copyright (2008) Schibsted Søk AS
+/* Copyright (2008-2009) Schibsted Søk AS
  * This file is part of SESAT.
  *
  *   SESAT is free software: you can redistribute it and/or modify
@@ -155,6 +155,8 @@
 
         boolean result = false;
 
+        // FIXME handle XorClause to call isEmptyLeaf on only the child that 
getContext().visitXorClause(..) does.
+        // if(clause instanceof XorClause){}else{
         if(clause instanceof BinaryClause){
             final BinaryClause c = (BinaryClause)clause;
             result = isEmptyLeaf(c.getFirstClause()) && 
isEmptyLeaf(c.getSecondClause());

Modified: 
branches/2.18/search-command-control-spi/src/main/java/no/sesat/search/mode/command/querybuilder/BaseFilterBuilder.java
===================================================================
--- 
branches/2.18/search-command-control-spi/src/main/java/no/sesat/search/mode/command/querybuilder/BaseFilterBuilder.java
     2009-03-12 12:05:11 UTC (rev 7221)
+++ 
branches/2.18/search-command-control-spi/src/main/java/no/sesat/search/mode/command/querybuilder/BaseFilterBuilder.java
     2009-03-12 14:26:24 UTC (rev 7222)
@@ -1,5 +1,5 @@
 /*
- * Copyright (2008) Schibsted Søk AS
+ * Copyright (2008-2009) Schibsted Søk AS
  * This file is part of SESAT.
  *
  *   SESAT is free software: you can redistribute it and/or modify
@@ -43,8 +43,6 @@
  *
  * The " +" is defined as the deliminator, and is provided by getDelim() if a 
subclass wishes to alter just this.
  *
- * @todo add correct handling of NotClause and AndNotClause.
- * This also needs to be added to the query builder visitor above.
  *
  * @todo design for polymorphism and push out fast specifics to appropriate 
subclass.
  *
@@ -56,12 +54,15 @@
 
     private static final Logger LOG = 
Logger.getLogger(BaseFilterBuilder.class);
 
-    private static final String DELIM = " +";
+    private static final String DELIM_INCLUSIVE = " +";
+    private static final String DELIM_EXCLUSIVE = " -";
 
     // Attributes ----------------------------------------------------
 
     private final StringBuilder additionalFilters = new StringBuilder();
 
+    private boolean insideNot = false;
+
     // Static --------------------------------------------------------
 
     // Constructors --------------------------------------------------
@@ -91,6 +92,7 @@
 
     public String getFilterString() {
 
+        insideNot = false;
         return getQueryString()
                 + (additionalFilters.length() > 0 ? ' ' : "")
                 + additionalFilters.toString();
@@ -158,9 +160,19 @@
     }
 
     protected void visitImpl(final NotClause clause) {
+
+        final boolean wasInsideNot = insideNot;
+        insideNot = true;
+        clause.getFirstClause().accept(this);
+        insideNot = wasInsideNot;
     }
 
     protected void visitImpl(final AndNotClause clause) {
+
+        final boolean wasInsideNot = insideNot;
+        insideNot = true;
+        clause.getFirstClause().accept(this);
+        insideNot = wasInsideNot;
     }
 
     protected void appendFilter(final LeafClause clause) {
@@ -188,7 +200,7 @@
     }
 
     protected String getDelim(){
-        return DELIM;
+        return insideNot ? DELIM_EXCLUSIVE : DELIM_INCLUSIVE;
     }
 
     // Private -------------------------------------------------------

_______________________________________________
Kernel-commits mailing list
Kernel-commits@sesat.no
http://sesat.no/mailman/listinfo/kernel-commits

Reply via email to