mirror of https://github.com/apache/lucene.git
Added rewrite methods to all SpanQuery subclasses that nest SpanQuerys
git-svn-id: https://svn.apache.org/repos/asf/lucene/java/trunk@289556 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
b32b4b2235
commit
f32d7e7786
|
@ -145,6 +145,7 @@ New features
|
||||||
20. Added a new class MatchAllDocsQuery that matches all documents.
|
20. Added a new class MatchAllDocsQuery that matches all documents.
|
||||||
(John Wang via Daniel Naber, bug #34946)
|
(John Wang via Daniel Naber, bug #34946)
|
||||||
|
|
||||||
|
|
||||||
API Changes
|
API Changes
|
||||||
|
|
||||||
1. Several methods and fields have been deprecated. The API documentation
|
1. Several methods and fields have been deprecated. The API documentation
|
||||||
|
@ -165,6 +166,10 @@ API Changes
|
||||||
4. Add a serializable Parameter Class to standardize parameter enum
|
4. Add a serializable Parameter Class to standardize parameter enum
|
||||||
classes in BooleanClause and Field. (Christoph)
|
classes in BooleanClause and Field. (Christoph)
|
||||||
|
|
||||||
|
5. Added rewrite methods to all SpanQuery subclasses that nest other SpanQuerys.
|
||||||
|
This allows custom SpanQuery subclasses that rewrite (for term expansion, for
|
||||||
|
example) to nest within the built-in SpanQuery classes successfully.
|
||||||
|
|
||||||
Bug fixes
|
Bug fixes
|
||||||
|
|
||||||
1. The JSP demo page (src/jsp/results.jsp) now properly closes the
|
1. The JSP demo page (src/jsp/results.jsp) now properly closes the
|
||||||
|
|
|
@ -21,6 +21,7 @@ import java.io.IOException;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
|
|
||||||
import org.apache.lucene.index.IndexReader;
|
import org.apache.lucene.index.IndexReader;
|
||||||
|
import org.apache.lucene.search.Query;
|
||||||
|
|
||||||
/** Matches spans near the beginning of a field. */
|
/** Matches spans near the beginning of a field. */
|
||||||
public class SpanFirstQuery extends SpanQuery {
|
public class SpanFirstQuery extends SpanQuery {
|
||||||
|
@ -87,4 +88,19 @@ public class SpanFirstQuery extends SpanQuery {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Query rewrite(IndexReader reader) throws IOException {
|
||||||
|
SpanFirstQuery clone = null;
|
||||||
|
|
||||||
|
SpanQuery rewritten = (SpanQuery) match.rewrite(reader);
|
||||||
|
if (rewritten != match) {
|
||||||
|
clone = (SpanFirstQuery) this.clone();
|
||||||
|
clone.match = rewritten;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (clone != null) {
|
||||||
|
return clone; // some clauses rewrote
|
||||||
|
} else {
|
||||||
|
return this; // no clauses rewrote
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,6 +25,7 @@ import java.util.Iterator;
|
||||||
|
|
||||||
|
|
||||||
import org.apache.lucene.index.IndexReader;
|
import org.apache.lucene.index.IndexReader;
|
||||||
|
import org.apache.lucene.search.Query;
|
||||||
|
|
||||||
/** Matches spans which are near one another. One can specify <i>slop</i>, the
|
/** Matches spans which are near one another. One can specify <i>slop</i>, the
|
||||||
* maximum number of intervening unmatched positions, as well as whether
|
* maximum number of intervening unmatched positions, as well as whether
|
||||||
|
@ -110,6 +111,24 @@ public class SpanNearQuery extends SpanQuery {
|
||||||
return new NearSpans(this, reader);
|
return new NearSpans(this, reader);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Query rewrite(IndexReader reader) throws IOException {
|
||||||
|
SpanNearQuery clone = null;
|
||||||
|
for (int i = 0 ; i < clauses.size(); i++) {
|
||||||
|
SpanQuery c = (SpanQuery)clauses.get(i);
|
||||||
|
SpanQuery query = (SpanQuery) c.rewrite(reader);
|
||||||
|
if (query != c) { // clause rewrote: must clone
|
||||||
|
if (clone == null)
|
||||||
|
clone = (SpanNearQuery) this.clone();
|
||||||
|
clone.clauses.set(i,query);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (clone != null) {
|
||||||
|
return clone; // some clauses rewrote
|
||||||
|
} else {
|
||||||
|
return this; // no clauses rewrote
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/** Returns true iff <code>o</code> is equal to this. */
|
/** Returns true iff <code>o</code> is equal to this. */
|
||||||
public boolean equals(Object o) {
|
public boolean equals(Object o) {
|
||||||
if (this == o) return true;
|
if (this == o) return true;
|
||||||
|
|
|
@ -21,6 +21,7 @@ import java.io.IOException;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
|
|
||||||
import org.apache.lucene.index.IndexReader;
|
import org.apache.lucene.index.IndexReader;
|
||||||
|
import org.apache.lucene.search.Query;
|
||||||
|
|
||||||
/** Removes matches which overlap with another SpanQuery. */
|
/** Removes matches which overlap with another SpanQuery. */
|
||||||
public class SpanNotQuery extends SpanQuery {
|
public class SpanNotQuery extends SpanQuery {
|
||||||
|
@ -127,4 +128,25 @@ public class SpanNotQuery extends SpanQuery {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Query rewrite(IndexReader reader) throws IOException {
|
||||||
|
SpanNotQuery clone = null;
|
||||||
|
|
||||||
|
SpanQuery rewrittenInclude = (SpanQuery) include.rewrite(reader);
|
||||||
|
if (rewrittenInclude != include) {
|
||||||
|
clone = (SpanNotQuery) this.clone();
|
||||||
|
clone.include = rewrittenInclude;
|
||||||
|
}
|
||||||
|
SpanQuery rewrittenExclude = (SpanQuery) exclude.rewrite(reader);
|
||||||
|
if (rewrittenExclude != include) {
|
||||||
|
if (clone == null) clone = (SpanNotQuery) this.clone();
|
||||||
|
clone.exclude = rewrittenExclude;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (clone != null) {
|
||||||
|
return clone; // some clauses rewrote
|
||||||
|
} else {
|
||||||
|
return this; // no clauses rewrote
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,6 +25,7 @@ import java.util.Iterator;
|
||||||
|
|
||||||
import org.apache.lucene.index.IndexReader;
|
import org.apache.lucene.index.IndexReader;
|
||||||
import org.apache.lucene.util.PriorityQueue;
|
import org.apache.lucene.util.PriorityQueue;
|
||||||
|
import org.apache.lucene.search.Query;
|
||||||
|
|
||||||
/** Matches the union of its clauses.*/
|
/** Matches the union of its clauses.*/
|
||||||
public class SpanOrQuery extends SpanQuery {
|
public class SpanOrQuery extends SpanQuery {
|
||||||
|
@ -64,6 +65,24 @@ public class SpanOrQuery extends SpanQuery {
|
||||||
return terms;
|
return terms;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Query rewrite(IndexReader reader) throws IOException {
|
||||||
|
SpanOrQuery clone = null;
|
||||||
|
for (int i = 0 ; i < clauses.size(); i++) {
|
||||||
|
SpanQuery c = (SpanQuery)clauses.get(i);
|
||||||
|
SpanQuery query = (SpanQuery) c.rewrite(reader);
|
||||||
|
if (query != c) { // clause rewrote: must clone
|
||||||
|
if (clone == null)
|
||||||
|
clone = (SpanOrQuery) this.clone();
|
||||||
|
clone.clauses.set(i,query);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (clone != null) {
|
||||||
|
return clone; // some clauses rewrote
|
||||||
|
} else {
|
||||||
|
return this; // no clauses rewrote
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public String toString(String field) {
|
public String toString(String field) {
|
||||||
StringBuffer buffer = new StringBuffer();
|
StringBuffer buffer = new StringBuffer();
|
||||||
buffer.append("spanOr([");
|
buffer.append("spanOr([");
|
||||||
|
|
Loading…
Reference in New Issue