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