--- /home/dnaber/workspace/LuceneCVS142/jakarta-lucene/src/java/org/apache/lucene/search/IndexSearcher.java 2004-10-01 22:10:28.000000000 +0200 +++ IndexSearcher.java 2004-10-21 16:45:40.000000000 +0200 @@ -82,7 +82,7 @@ // inherit javadoc public TopDocs search(Query query, Filter filter, final int nDocs) throws IOException { - Scorer scorer = query.weight(this).scorer(reader); + Scorer scorer = query.weight(getTopmostSearcher()).scorer(reader); if (scorer == null) return new TopDocs(0, new ScoreDoc[0]); @@ -114,7 +114,7 @@ public TopFieldDocs search(Query query, Filter filter, final int nDocs, Sort sort) throws IOException { - Scorer scorer = query.weight(this).scorer(reader); + Scorer scorer = query.weight(getTopmostSearcher()).scorer(reader); if (scorer == null) return new TopFieldDocs(0, new ScoreDoc[0], sort.fields); @@ -155,7 +155,7 @@ }; } - Scorer scorer = query.weight(this).scorer(reader); + Scorer scorer = query.weight(getTopmostSearcher()).scorer(reader); if (scorer == null) return; scorer.score(collector); @@ -171,7 +171,7 @@ } public Explanation explain(Query query, int doc) throws IOException { - return query.weight(this).explain(reader, doc); + return query.weight(getTopmostSearcher()).explain(reader, doc); } } --- /home/dnaber/workspace/LuceneCVS142/jakarta-lucene/src/java/org/apache/lucene/search/MultiSearcher.java 2004-03-30 00:48:03.000000000 +0200 +++ MultiSearcher.java 2004-10-21 16:43:02.000000000 +0200 @@ -37,6 +37,7 @@ starts = new int[searchables.length + 1]; // build starts array for (int i = 0; i < searchables.length; i++) { + if (searchables[i] instanceof Searcher) ((Searcher)searchables[i]).setTopmostSearcher(getTopmostSearcher()); starts[i] = maxDoc; maxDoc += searchables[i].maxDoc(); // compute maxDocs } --- /home/dnaber/workspace/LuceneCVS142/jakarta-lucene/src/java/org/apache/lucene/search/Query.java 2004-03-02 14:48:10.000000000 +0100 +++ Query.java 2004-10-21 17:03:28.000000000 +0200 @@ -96,11 +96,10 @@ /** Expert: called when re-writing queries under MultiSearcher. * - *
Only implemented by derived queries, with no - * {@link #createWeight(Searcher)} implementatation. + *
Individual queries must override if combining is required.
*/
public Query combine(Query[] queries) {
- throw new UnsupportedOperationException();
+ return queries[0];
}
--- /home/dnaber/workspace/LuceneCVS142/jakarta-lucene/src/java/org/apache/lucene/search/Searcher.java 2004-03-30 00:48:04.000000000 +0200
+++ Searcher.java 2004-10-21 16:42:08.000000000 +0200
@@ -22,6 +22,9 @@
* Implements some common utility methods.
*/
public abstract class Searcher implements Searchable {
+
+ private Searcher topmostSearcher = this;
+
/** Returns the documents matching query. */
public final Hits search(Query query) throws IOException {
return search(query, (Filter)null);
@@ -85,4 +88,18 @@
public Similarity getSimilarity() {
return this.similarity;
}
+
+ /** Expert: Access the topmost Searcher
+ * @return the topmost Searcher, which is typically this or an encompassing MultiSearcher
+ */
+ public Searcher getTopmostSearcher() {
+ return topmostSearcher;
+ }
+
+ /** Expert: set the topmost Searcher
+ * @param topmostSearcher the outermost Searcher of which we are a subsearcher
+ */
+ public void setTopmostSearcher(Searcher topmostSearcher) {
+ this.topmostSearcher = topmostSearcher;
+ }
}