luetzkendorf 2004/11/29 10:39:38
Modified: src/stores/org/apache/slide/index/lucene
LuceneExpressionFactory.java
src/stores/org/apache/slide/index/lucene/expressions
MergeExpression.java
Added: src/stores/org/apache/slide/index/lucene/expressions
MergeExpressionMixed.java
Log:
better support for AND expressions that contain fast lucene expressions
and slow basic expressions
Revision Changes Path
1.6 +19 -25
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.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- LuceneExpressionFactory.java 8 Nov 2004 09:45:57 -0000 1.5
+++ LuceneExpressionFactory.java 29 Nov 2004 18:39:37 -0000 1.6
@@ -28,7 +28,7 @@
import java.util.List;
import org.apache.slide.content.NodeProperty;
-import org.apache.slide.index.lucene.expressions.AbstractExpression;
+import org.apache.slide.index.lucene.expressions.AbstractLuceneExpression;
import org.apache.slide.index.lucene.expressions.BetweenExpression;
import org.apache.slide.index.lucene.expressions.ContainsExpression;
import org.apache.slide.index.lucene.expressions.EqExpression;
@@ -39,12 +39,12 @@
import org.apache.slide.index.lucene.expressions.LikeExpression;
import org.apache.slide.index.lucene.expressions.LtExpression;
import org.apache.slide.index.lucene.expressions.MergeExpression;
+import org.apache.slide.index.lucene.expressions.MergeExpressionMixed;
import org.apache.slide.index.lucene.expressions.PropcontainsExpression;
import org.apache.slide.index.lucene.expressions.PropertyContainsExpression;
import org.apache.slide.search.BadQueryException;
import org.apache.slide.search.PropertyProvider;
import org.apache.slide.search.basic.BasicExpressionFactory;
-import org.apache.slide.search.basic.ComparableResourcesPool;
import org.apache.slide.search.basic.IBasicExpression;
import org.apache.slide.search.basic.IBasicQuery;
import org.apache.slide.search.basic.Literals;
@@ -77,7 +77,7 @@
List basicExpressions = new ArrayList(expressionsToMerge.size());
for(Iterator i = expressionsToMerge.iterator(); i.hasNext();) {
Object o = i.next();
- if (o instanceof AbstractExpression) {
+ if (o instanceof AbstractLuceneExpression) {
luceneExpressions.add(o);
} else {
basicExpressions.add(o);
@@ -103,15 +103,16 @@
}
else if (mergeOperator.equals(Literals.AND)) {
if (basicExpressions.size() > 0 && luceneExpressions.size()
> 0) {
- // 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);
+ // a mixture between fast lucene expr. and slow basic
expr.
+ AbstractLuceneExpression e = new
MergeExpression(this.index,
+ true, luceneExpressions);
+ e.setFactory(this);
+ result = new MergeExpressionMixed(this.index, e,
+ basicExpressions);
} else if (luceneExpressions.size() > 0) {
// lucene expressions only
- result = new MergeExpression(this.index, true,
expressionsToMerge);
+ result = new MergeExpression(this.index, true,
+ expressionsToMerge);
} else {
// basic expressions only
result = super.createMergeExpression(mergeOperator,
@@ -119,7 +120,8 @@
}
}
else {
- super.createMergeExpression(mergeOperator, namespace,
expressionsToMerge);
+ super.createMergeExpression(mergeOperator, namespace,
+ expressionsToMerge);
}
}
if (result != null) {
@@ -175,7 +177,7 @@
// the following expressions all are property related and
// must have a <DAV:prop> element
- Element property = AbstractExpression.getPropertyElement(e);
+ Element property = AbstractLuceneExpression.getPropertyElement(e);
String namespace = property.getNamespaceURI();
String name = property.getName();
IndexConfiguration configuration = index.getConfiguration();
@@ -248,7 +250,7 @@
return new IsPrincipalExpression(this.index, true);
}
- Element property = AbstractExpression.getPropertyElement(e);
+ Element property = AbstractLuceneExpression.getPropertyElement(e);
String namespace = property.getNamespaceURI();
String name = property.getName();
IndexConfiguration configuration = index.getConfiguration();
@@ -299,15 +301,7 @@
public void init(IBasicQuery query, PropertyProvider propertyProvider)
throws BadQueryException
{
- this.query = (IBasicQuery) query;
+ this.query = query;
this.propertyProvider = propertyProvider;
- }
-
-
- protected ComparableResourcesPool getRequestedResourcePool()
- throws BadQueryException
- {
- // TODO Auto-generated method stub
- return super.getRequestedResourcePool();
}
}
1.3 +6 -6
jakarta-slide/src/stores/org/apache/slide/index/lucene/expressions/MergeExpression.java
Index: MergeExpression.java
===================================================================
RCS file:
/home/cvs/jakarta-slide/src/stores/org/apache/slide/index/lucene/expressions/MergeExpression.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- MergeExpression.java 25 Oct 2004 07:52:30 -0000 1.2
+++ MergeExpression.java 29 Nov 2004 18:39:38 -0000 1.3
@@ -34,14 +34,14 @@
/**
* Implements <code>and</code> and <code>or</code>.
*/
-public class MergeExpression extends AbstractExpression
+public class MergeExpression extends AbstractLuceneExpression
{
/**
* Constructor.
* @param index The index to be searched.
* @param and <code>true</code> if AND or <code>false</code> if OR
* @param expressions list of expressions (must all be derived from
- * [EMAIL PROTECTED] AbstractExpression}, i.e. must all be lucene
executable)
+ * [EMAIL PROTECTED] AbstractLuceneExpression}, i.e. must all be
lucene executable)
*/
public MergeExpression(Index index, boolean and, Collection expressions)
{
@@ -51,7 +51,7 @@
for(Iterator i = expressions.iterator(); i.hasNext();) {
Object e = i.next();
- Query q = ((AbstractExpression)e).getQuery();
+ Query q = ((AbstractLuceneExpression)e).getQuery();
booleanQuery.add(q, and, false);
}
1.1
jakarta-slide/src/stores/org/apache/slide/index/lucene/expressions/MergeExpressionMixed.java
Index: MergeExpressionMixed.java
===================================================================
/*
* $Header:
/home/cvs/jakarta-slide/src/stores/org/apache/slide/index/lucene/expressions/MergeExpressionMixed.java,v
1.1 2004/11/29 18:39:38 luetzkendorf Exp $
* $Revision: 1.1 $
* $Date: 2004/11/29 18:39:38 $
*
* ====================================================================
*
* Copyright 1999-2004 The Apache Software Foundation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
package org.apache.slide.index.lucene.expressions;
import java.util.Collection;
import java.util.Iterator;
import java.util.Set;
import org.apache.slide.index.lucene.Index;
import org.apache.slide.search.BadQueryException;
import org.apache.slide.search.SearchException;
import org.apache.slide.search.basic.ComparableResourcesPool;
import org.apache.slide.search.basic.IBasicResultSet;
import org.apache.slide.search.basic.expression.GenericBasicExpression;
/**
* Implements <code>and</code>.
*/
public class MergeExpressionMixed extends AbstractLuceneExpression
{
private AbstractLuceneExpression expression;
private Collection basicExpressions;
/**
* Constructor.
* @param index The index to be searched.
* @param expressions list of expressions (must all be derived from
* [EMAIL PROTECTED] AbstractLuceneExpression}, i.e. must all be
lucene executable)
*/
public MergeExpressionMixed(Index index, AbstractLuceneExpression
expression,
Collection basicExpressions)
{
super(index);
this.expression = expression;
this.basicExpressions = basicExpressions;
}
public IBasicResultSet execute() throws SearchException {
// 1st execute the lucene expression
IBasicResultSet resultSet = this.expression.execute();
// iterate over the basic expressions and execute them relative to
// the current result set
for(Iterator i = this.basicExpressions.iterator(); i.hasNext();) {
Object o = i.next();
try {
GenericBasicExpression expression =
(GenericBasicExpression)o;
expression.setRequestedResourcePool(
new
ComparableResourcesPoolImpl(resultSet));
resultSet = expression.execute();
} catch(ClassCastException e) {
throw new SearchException("Unexpected query structure",
e);
}
}
return resultSet;
}
private static class ComparableResourcesPoolImpl
implements ComparableResourcesPool
{
private IBasicResultSet resultSet;
ComparableResourcesPoolImpl(IBasicResultSet resultSet) {
this.resultSet = resultSet;
}
public Set getPool() throws BadQueryException {
return this.resultSet;
}
public boolean partialResult() {
return false;
}
public Iterator resourceIterator() throws BadQueryException {
return this.resultSet.iterator();
}
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]