You are viewing a plain text version of this content. The canonical link for it is here.
Posted to slide-dev@jakarta.apache.org by lu...@apache.org on 2004/11/01 18:47:28 UTC

cvs commit: jakarta-slide/src/stores/org/apache/slide/index/lucene/expressions AbstractExpression.java GtExpression.java IsCollectionExpression.java IsDefinedExpression.java IsPrincipalExpression.java LikeExpression.java LtExpression.java PropcontainsExpression.java PropertyContainsExpression.java

luetzkendorf    2004/11/01 09:47:28

  Modified:    src/stores/org/apache/slide/index/lucene Index.java
                        LuceneExpressionFactory.java
               src/stores/org/apache/slide/index/lucene/expressions
                        AbstractExpression.java GtExpression.java
                        IsCollectionExpression.java
                        IsDefinedExpression.java IsPrincipalExpression.java
                        LikeExpression.java LtExpression.java
                        PropcontainsExpression.java
                        PropertyContainsExpression.java
  Log:
  smaller improvements (negation, depth index)
  
  Revision  Changes    Path
  1.5       +13 -6     jakarta-slide/src/stores/org/apache/slide/index/lucene/Index.java
  
  Index: Index.java
  ===================================================================
  RCS file: /home/cvs/jakarta-slide/src/stores/org/apache/slide/index/lucene/Index.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- Index.java	30 Oct 2004 12:52:11 -0000	1.4
  +++ Index.java	1 Nov 2004 17:47:21 -0000	1.5
  @@ -59,6 +59,7 @@
       public static final String KEY_FIELD_NAME = "SLIDE_KEY";
       public static final String URI_FIELD_NAME = "SLIDE_URI";
       public static final String SCOPE_FIELD_NAME = "SLIDE_SCOPE";
  +    public static final String DEPTH_FIELD_NAME = "SLIDE_DEPTH";
       public static final String VERSION_FIELD_NAME = "SLIDE_VERSION";
       public static final String IS_DEFINED_FIELD_NAME = "SLIDE_ISDEFINED";
       
  @@ -71,6 +72,8 @@
       public static final String DATE_UPPER_BOUND = DATE_INDEX_FORMAT.format(new Date(Long.MAX_VALUE));
       public static final String INT_LOWER_BOUND = INT_INDEX_FORMAT.format(Long.MIN_VALUE);
       public static final String INT_UPPER_BOUND = INT_INDEX_FORMAT.format(Long.MAX_VALUE);
  +    public static final String STRING_UPPER_BOUND = "\uffff\uffff";
  +    public static final String STRING_LOWER_BOUND = "";
   
       protected static final String LOG_CHANNEL = Index.class.getName();
       
  @@ -190,10 +193,14 @@
           StringTokenizer tokenizer = new StringTokenizer(uri, "/");
           StringBuffer buffer = new StringBuffer(uri.length());
           doc.add(unstoredString(Index.SCOPE_FIELD_NAME, "/"));
  +        int depth = 0;
           for(; tokenizer.hasMoreTokens();) {
               buffer.append("/").append(tokenizer.nextToken());
               doc.add(unstoredString(Index.SCOPE_FIELD_NAME, buffer.toString()));
  +            depth++;
           }
  +        doc.add(unstoredString(Index.DEPTH_FIELD_NAME, 
  +                configuration.intToIndexString(depth)));
           
           //doc.add(unstoredString(Index.VERSION_FIELD_NAME, 
           //        descriptor.getRevisionNumber().toString()));
  @@ -286,7 +293,7 @@
                   IndexReader reader = IndexReader.open(getDirectory());
                   for(Iterator i = removeJobs.iterator(); i.hasNext();) {
                       IndexJob job = (IndexJob)i.next();
  -                    logger.log("remove: " + job.key, LOG_CHANNEL, Logger.INFO);
  +                    logger.log("remove: " + job.key, LOG_CHANNEL, Logger.DEBUG);
                       reader.delete(new Term(Index.KEY_FIELD_NAME, job.getKey()));
                       this.jobCounter++;
                   }
  @@ -299,14 +306,14 @@
                   
                   for(Iterator i = addJobs.iterator(); i.hasNext(); ) {
                       IndexJob job = (IndexJob)i.next();
  -                    logger.log("index: " + job.key, LOG_CHANNEL, Logger.INFO);
  +                    logger.log("index: " + job.key, LOG_CHANNEL, Logger.DEBUG);
                       Document doc = createLuceneDocument(job.uri, job.descriptor);
                       writer.addDocument(doc);
                       this.jobCounter++;
                   }
                   if (this.jobCounter > configuration.getOptimizeThreshold()) {
                       writer.optimize();
  -                    logger.log("optimize", LOG_CHANNEL, Logger.INFO);
  +                    logger.log("optimize", LOG_CHANNEL, Logger.DEBUG);
                       this.jobCounter = 0;
                   }
                   writer.close();
  
  
  
  1.4       +29 -9     jakarta-slide/src/stores/org/apache/slide/index/lucene/LuceneExpressionFactory.java
  
  Index: LuceneExpressionFactory.java
  ===================================================================
  RCS file: /home/cvs/jakarta-slide/src/stores/org/apache/slide/index/lucene/LuceneExpressionFactory.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- LuceneExpressionFactory.java	25 Oct 2004 07:52:30 -0000	1.3
  +++ LuceneExpressionFactory.java	1 Nov 2004 17:47:21 -0000	1.4
  @@ -88,13 +88,14 @@
                   if (basicExpressions.size() > 0 && luceneExpressions.size() > 0) {
                       // a mixture
                       IBasicExpression e1 = new MergeExpression(this.index, false, luceneExpressions);
  +                    e1.setFactory(this);
                       basicExpressions.add(0, e1);
                       result =  super.createMergeExpression(Literals.OR, namespace, basicExpressions);
                   } else if (luceneExpressions.size() > 0) {
                       // lucene expressions only
                       result = new MergeExpression(this.index, false, expressionsToMerge);
                   } else {
  -                    // no lucene expression
  +                    // basic expressions only
                       result = super.createMergeExpression(mergeOperator, 
                               namespace, expressionsToMerge);
                   }
  @@ -104,12 +105,14 @@
                       // a mixture
                       // TODO this could be optimized
                       IBasicExpression e1 = new MergeExpression(this.index, true, luceneExpressions);
  +                    e1.setFactory(this);
                       basicExpressions.add(0, e1);
                       result =  super.createMergeExpression(Literals.AND, namespace, basicExpressions);
                   } else if (luceneExpressions.size() > 0) {
                       // lucene expressions only
                       result = new MergeExpression(this.index, true, expressionsToMerge);
                   } else {
  +                    // basic expressions only
                       result = super.createMergeExpression(mergeOperator, 
                               namespace, expressionsToMerge);
                   }
  @@ -200,7 +203,12 @@
           }
           else if (operator.equals(Literals.LIKE)) {
               if (configuration.isStringProperty(namespace, name)) {
  -                return new LikeExpression(this.index, e);
  +                return new LikeExpression(this.index, e, false);
  +            }
  +        }
  +        else if (operator.equals(Literals.NOT_LIKE)) {
  +            if (configuration.isStringProperty(namespace, name)) {
  +                return new LikeExpression(this.index, e, true);
               }
           }
           else if (operator.equals(Literals.ISDEFINED)) {
  @@ -230,9 +238,6 @@
           if (operator.equals(Literals.NOT_ISPRINCIPAL)) {
               return new IsPrincipalExpression(this.index, true);
           }
  -        if (operator.equals(Literals.PROPCONTAINS)) {
  -            return new PropcontainsExpression(this.index, e);
  -        }
           
           Element property = AbstractExpression.getPropertyElement(e);
           String namespace = property.getNamespaceURI();
  @@ -252,7 +257,22 @@
           }
           if (operator.equals("property-contains")) {
               if (configuration.isTextProperty(namespace, name)) {
  -                return new PropertyContainsExpression(this.index, e);
  +                return new PropertyContainsExpression(this.index, e, false);
  +            }
  +        }
  +        if (operator.equals("not-property-contains")) {
  +            if (configuration.isTextProperty(namespace, name)) {
  +                return new PropertyContainsExpression(this.index, e, true);
  +            }
  +        }
  +        if (operator.equals(Literals.PROPCONTAINS)) {
  +            if (configuration.isStringProperty(namespace, name)) {
  +                return new PropcontainsExpression(this.index, e, false);
  +            }
  +        }
  +        if (operator.equals(Literals.NOT_PROPCONTAINS)) {
  +            if (configuration.isStringProperty(namespace, name)) {
  +                return new PropcontainsExpression(this.index, e, true);
               }
           }
           return super.createExpression(e);
  
  
  
  1.3       +34 -5     jakarta-slide/src/stores/org/apache/slide/index/lucene/expressions/AbstractExpression.java
  
  Index: AbstractExpression.java
  ===================================================================
  RCS file: /home/cvs/jakarta-slide/src/stores/org/apache/slide/index/lucene/expressions/AbstractExpression.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- AbstractExpression.java	25 Oct 2004 07:52:30 -0000	1.2
  +++ AbstractExpression.java	1 Nov 2004 17:47:27 -0000	1.3
  @@ -26,6 +26,7 @@
   import java.util.Iterator;
   import java.util.List;
   import java.util.Set;
  +import java.util.StringTokenizer;
   
   import org.apache.lucene.document.Document;
   import org.apache.lucene.index.Term;
  @@ -33,6 +34,7 @@
   import org.apache.lucene.search.Hits;
   import org.apache.lucene.search.IndexSearcher;
   import org.apache.lucene.search.Query;
  +import org.apache.lucene.search.RangeQuery;
   import org.apache.lucene.search.TermQuery;
   
   import org.apache.slide.common.SlideException;
  @@ -114,6 +116,27 @@
           booleanQuery.add(new TermQuery(new Term(Index.SCOPE_FIELD_NAME, scope)), 
                   true, false);
           booleanQuery.add(luceneQuery, true, false);
  +        // add depth restriction
  +        switch (q.getScope().getDepth() ) {
  +            case QueryScope.DEPTH_INFINITY:
  +                break;
  +            case QueryScope.DEPTH_0:
  +                booleanQuery.add(new TermQuery(new Term(Index.DEPTH_FIELD_NAME, 
  +                        index.getConfiguration().intToIndexString(getDepth(scope)))), 
  +                        true, false);
  +                break;
  +            case QueryScope.DEPTH_1:
  +            default:
  +                booleanQuery.add(new RangeQuery(
  +                        new Term(Index.DEPTH_FIELD_NAME, 
  +                                index.getConfiguration().intToIndexString(getDepth(scope))), 
  +                        new Term(Index.DEPTH_FIELD_NAME,
  +                                index.getConfiguration().intToIndexString(getDepth(scope)+q.getScope().getDepth())),
  +                        true), 
  +                     true, false);
  +
  +                    
  +        }
           luceneQuery = booleanQuery;
   
           IndexSearcher searcher = null;
  @@ -126,7 +149,7 @@
               Hits hits = searcher.search(luceneQuery);
               
               index.getLogger().log("finished: " + hits.length() + " hits (" + 
  -                    (System.currentTimeMillis() - start) + "s)" , LOG_CHANNEL, Logger.DEBUG);
  +                    (System.currentTimeMillis() - start) + "ms)" , LOG_CHANNEL, Logger.DEBUG);
   
               IBasicResultSet result = new BasicResultSetImpl(false);
   
  @@ -156,7 +179,12 @@
           }
       }
       
  -    protected Query getNegatedQuery(Query query) {
  +    private int getDepth(String path) {
  +        StringTokenizer tokenizer = new StringTokenizer(path, "/");
  +        return tokenizer.countTokens();
  +    }
  +    
  +    protected Query negateQuery(Query query) {
           BooleanQuery booleanQuery = new BooleanQuery();
           booleanQuery.add(
                   new TermQuery(new Term(Index.SCOPE_FIELD_NAME, "/")), 
  @@ -238,6 +266,7 @@
       
       
       
  +    //-  ComparableResourcesPool implementation --------------------------------
       
       public Set getPool() throws BadQueryException
       {   
  
  
  
  1.5       +4 -4      jakarta-slide/src/stores/org/apache/slide/index/lucene/expressions/GtExpression.java
  
  Index: GtExpression.java
  ===================================================================
  RCS file: /home/cvs/jakarta-slide/src/stores/org/apache/slide/index/lucene/expressions/GtExpression.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- GtExpression.java	30 Oct 2004 12:52:11 -0000	1.4
  +++ GtExpression.java	1 Nov 2004 17:47:27 -0000	1.5
  @@ -60,7 +60,7 @@
           } 
           else {
               value = literal.getTextTrim();
  -            upperBound = "\uffff\uffff"; //TODO
  +            upperBound = Index.STRING_UPPER_BOUND;
           }
           
           
  
  
  
  1.2       +4 -4      jakarta-slide/src/stores/org/apache/slide/index/lucene/expressions/IsCollectionExpression.java
  
  Index: IsCollectionExpression.java
  ===================================================================
  RCS file: /home/cvs/jakarta-slide/src/stores/org/apache/slide/index/lucene/expressions/IsCollectionExpression.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- IsCollectionExpression.java	18 Oct 2004 09:27:36 -0000	1.1
  +++ IsCollectionExpression.java	1 Nov 2004 17:47:27 -0000	1.2
  @@ -45,7 +45,7 @@
                   "collection")));
           
           if (negated) {
  -            setQuery(getNegatedQuery(getQuery()));
  +            setQuery(negateQuery(getQuery()));
           }
       }
   }
  
  
  
  1.4       +4 -4      jakarta-slide/src/stores/org/apache/slide/index/lucene/expressions/IsDefinedExpression.java
  
  Index: IsDefinedExpression.java
  ===================================================================
  RCS file: /home/cvs/jakarta-slide/src/stores/org/apache/slide/index/lucene/expressions/IsDefinedExpression.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- IsDefinedExpression.java	25 Oct 2004 07:52:30 -0000	1.3
  +++ IsDefinedExpression.java	1 Nov 2004 17:47:27 -0000	1.4
  @@ -53,7 +53,7 @@
           }
           
           if (negated) {
  -            setQuery(getNegatedQuery(getQuery()));
  +            setQuery(negateQuery(getQuery()));
           }
       }
   }
  
  
  
  1.2       +4 -4      jakarta-slide/src/stores/org/apache/slide/index/lucene/expressions/IsPrincipalExpression.java
  
  Index: IsPrincipalExpression.java
  ===================================================================
  RCS file: /home/cvs/jakarta-slide/src/stores/org/apache/slide/index/lucene/expressions/IsPrincipalExpression.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- IsPrincipalExpression.java	18 Oct 2004 09:27:36 -0000	1.1
  +++ IsPrincipalExpression.java	1 Nov 2004 17:47:27 -0000	1.2
  @@ -45,7 +45,7 @@
                   "principal")));
           
           if (negated) {
  -            setQuery(getNegatedQuery(getQuery()));
  +            setQuery(negateQuery(getQuery()));
           }
       }
   }
  
  
  
  1.3       +9 -4      jakarta-slide/src/stores/org/apache/slide/index/lucene/expressions/LikeExpression.java
  
  Index: LikeExpression.java
  ===================================================================
  RCS file: /home/cvs/jakarta-slide/src/stores/org/apache/slide/index/lucene/expressions/LikeExpression.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- LikeExpression.java	22 Oct 2004 15:14:46 -0000	1.2
  +++ LikeExpression.java	1 Nov 2004 17:47:27 -0000	1.3
  @@ -40,7 +40,8 @@
   public class LikeExpression extends AbstractExpression
   {
   
  -    public LikeExpression(Index index, Element element) throws BadQueryException
  +    public LikeExpression(Index index, Element element, boolean negated) 
  +        throws BadQueryException
       {
           super(index);
           
  @@ -59,6 +60,10 @@
           } else {
               setQuery(new WildcardQuery(new Term(field, 
                       transformQuerytext(text))));
  +        }
  +        
  +        if (negated) {
  +            setQuery(negateQuery(getQuery()));
           }
       }
       
  
  
  
  1.4       +4 -4      jakarta-slide/src/stores/org/apache/slide/index/lucene/expressions/LtExpression.java
  
  Index: LtExpression.java
  ===================================================================
  RCS file: /home/cvs/jakarta-slide/src/stores/org/apache/slide/index/lucene/expressions/LtExpression.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- LtExpression.java	30 Oct 2004 12:52:11 -0000	1.3
  +++ LtExpression.java	1 Nov 2004 17:47:27 -0000	1.4
  @@ -65,7 +65,7 @@
           } 
           else {
               value = literal.getTextTrim();
  -            lowerBound = ""; //TODO
  +            lowerBound = Index.STRING_LOWER_BOUND;
           }
           
           
  
  
  
  1.3       +9 -4      jakarta-slide/src/stores/org/apache/slide/index/lucene/expressions/PropcontainsExpression.java
  
  Index: PropcontainsExpression.java
  ===================================================================
  RCS file: /home/cvs/jakarta-slide/src/stores/org/apache/slide/index/lucene/expressions/PropcontainsExpression.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- PropcontainsExpression.java	22 Oct 2004 15:14:46 -0000	1.2
  +++ PropcontainsExpression.java	1 Nov 2004 17:47:27 -0000	1.3
  @@ -40,7 +40,8 @@
   public class PropcontainsExpression extends AbstractExpression
   {
   
  -    public PropcontainsExpression(Index index, Element element) throws BadQueryException
  +    public PropcontainsExpression(Index index, Element element, boolean negated) 
  +        throws BadQueryException
       {
           super(index);
           
  @@ -51,5 +52,9 @@
           String text = literal.getTextTrim();
           
           setQuery(new WildcardQuery(new Term(field, "*" + text + "*")));
  +        
  +        if (negated) {
  +            setQuery(negateQuery(getQuery()));
  +        }
       }
   }
  
  
  
  1.3       +7 -3      jakarta-slide/src/stores/org/apache/slide/index/lucene/expressions/PropertyContainsExpression.java
  
  Index: PropertyContainsExpression.java
  ===================================================================
  RCS file: /home/cvs/jakarta-slide/src/stores/org/apache/slide/index/lucene/expressions/PropertyContainsExpression.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- PropertyContainsExpression.java	25 Oct 2004 07:52:30 -0000	1.2
  +++ PropertyContainsExpression.java	1 Nov 2004 17:47:27 -0000	1.3
  @@ -47,7 +47,7 @@
   public class PropertyContainsExpression extends AbstractExpression
   {
   
  -    public PropertyContainsExpression(Index index, Element element)
  +    public PropertyContainsExpression(Index index, Element element, boolean negated)
               throws BadQueryException
       {
           super(index);
  @@ -72,6 +72,10 @@
               }
           } else {
               termOrPhraseQuery(config, field, literal);
  +        }
  +        
  +        if (negated) {
  +            setQuery(negateQuery(getQuery()));
           }
       }
   
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: slide-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: slide-dev-help@jakarta.apache.org