You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@lucene.apache.org by cu...@apache.org on 2004/02/06 20:19:20 UTC
cvs commit: jakarta-lucene/src/java/org/apache/lucene/search/spans SpanWeight.java
cutting 2004/02/06 11:19:20
Modified: . CHANGES.txt
src/java/org/apache/lucene/search BooleanQuery.java
PhrasePrefixQuery.java PhraseQuery.java Query.java
TermQuery.java
src/java/org/apache/lucene/search/spans SpanWeight.java
Log:
Permit queries to override the Similarity implementation.
Revision Changes Path
1.70 +6 -1 jakarta-lucene/CHANGES.txt
Index: CHANGES.txt
===================================================================
RCS file: /home/cvs/jakarta-lucene/CHANGES.txt,v
retrieving revision 1.69
retrieving revision 1.70
diff -u -r1.69 -r1.70
--- CHANGES.txt 30 Jan 2004 22:09:59 -0000 1.69
+++ CHANGES.txt 6 Feb 2004 19:19:20 -0000 1.70
@@ -45,6 +45,11 @@
7. Added a new span-based query API. This implements, among other
things, nested phrases. See javadocs for details. (Doug Cutting)
+ 8. Added new method Query.getSimilarity(Searcher), and changed
+ scorers to use it. This permits one to subclass a Query class so
+ that it can specify it's own Similarity implementation, perhaps
+ one that delegates through that of the Searcher.
+
1.3 final
1.19 +3 -3 jakarta-lucene/src/java/org/apache/lucene/search/BooleanQuery.java
Index: BooleanQuery.java
===================================================================
RCS file: /home/cvs/jakarta-lucene/src/java/org/apache/lucene/search/BooleanQuery.java,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -r1.18 -r1.19
--- BooleanQuery.java 15 Jan 2004 22:42:32 -0000 1.18
+++ BooleanQuery.java 6 Feb 2004 19:19:20 -0000 1.19
@@ -176,7 +176,7 @@
if (allRequired && noneBoolean) { // ConjunctionScorer is okay
ConjunctionScorer result =
- new ConjunctionScorer(searcher.getSimilarity());
+ new ConjunctionScorer(getSimilarity(searcher));
for (int i = 0 ; i < weights.size(); i++) {
BooleanClause c = (BooleanClause)clauses.elementAt(i);
Weight w = (Weight)weights.elementAt(i);
@@ -189,7 +189,7 @@
}
// Use good-old BooleanScorer instead.
- BooleanScorer result = new BooleanScorer(searcher.getSimilarity());
+ BooleanScorer result = new BooleanScorer(getSimilarity(searcher));
for (int i = 0 ; i < weights.size(); i++) {
BooleanClause c = (BooleanClause)clauses.elementAt(i);
@@ -233,7 +233,7 @@
if (coord == 1) // only one clause matched
sumExpl = sumExpl.getDetails()[0]; // eliminate wrapper
- float coordFactor = searcher.getSimilarity().coord(coord, maxCoord);
+ float coordFactor = getSimilarity(searcher).coord(coord, maxCoord);
if (coordFactor == 1.0f) // coord is no-op
return sumExpl; // eliminate wrapper
else {
1.11 +3 -3 jakarta-lucene/src/java/org/apache/lucene/search/PhrasePrefixQuery.java
Index: PhrasePrefixQuery.java
===================================================================
RCS file: /home/cvs/jakarta-lucene/src/java/org/apache/lucene/search/PhrasePrefixQuery.java,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -r1.10 -r1.11
--- PhrasePrefixQuery.java 15 Dec 2003 22:26:13 -0000 1.10
+++ PhrasePrefixQuery.java 6 Feb 2004 19:19:20 -0000 1.11
@@ -135,7 +135,7 @@
while (i.hasNext()) {
Term[] terms = (Term[])i.next();
for (int j=0; j<terms.length; j++)
- idf += searcher.getSimilarity().idf(terms[j], searcher);
+ idf += getSimilarity(searcher).idf(terms[j], searcher);
}
queryWeight = idf * getBoost(); // compute query weight
@@ -169,10 +169,10 @@
}
if (slop == 0)
- return new ExactPhraseScorer(this, tps, searcher.getSimilarity(),
+ return new ExactPhraseScorer(this, tps, getSimilarity(searcher),
reader.norms(field));
else
- return new SloppyPhraseScorer(this, tps, searcher.getSimilarity(),
+ return new SloppyPhraseScorer(this, tps, getSimilarity(searcher),
slop, reader.norms(field));
}
1.13 +3 -3 jakarta-lucene/src/java/org/apache/lucene/search/PhraseQuery.java
Index: PhraseQuery.java
===================================================================
RCS file: /home/cvs/jakarta-lucene/src/java/org/apache/lucene/search/PhraseQuery.java,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -r1.12 -r1.13
--- PhraseQuery.java 15 Dec 2003 22:26:13 -0000 1.12
+++ PhraseQuery.java 6 Feb 2004 19:19:20 -0000 1.13
@@ -121,7 +121,7 @@
public float getValue() { return value; }
public float sumOfSquaredWeights() throws IOException {
- idf = searcher.getSimilarity().idf(terms, searcher);
+ idf = getSimilarity(searcher).idf(terms, searcher);
queryWeight = idf * getBoost(); // compute query weight
return queryWeight * queryWeight; // square it
}
@@ -145,11 +145,11 @@
}
if (slop == 0) // optimize exact case
- return new ExactPhraseScorer(this, tps, searcher.getSimilarity(),
+ return new ExactPhraseScorer(this, tps, getSimilarity(searcher),
reader.norms(field));
else
return
- new SloppyPhraseScorer(this, tps, searcher.getSimilarity(), slop,
+ new SloppyPhraseScorer(this, tps, getSimilarity(searcher), slop,
reader.norms(field));
}
1.14 +10 -1 jakarta-lucene/src/java/org/apache/lucene/search/Query.java
Index: Query.java
===================================================================
RCS file: /home/cvs/jakarta-lucene/src/java/org/apache/lucene/search/Query.java,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -r1.13 -r1.14
--- Query.java 3 Oct 2003 03:05:28 -0000 1.13
+++ Query.java 6 Feb 2004 19:19:20 -0000 1.14
@@ -120,7 +120,7 @@
Query query = searcher.rewrite(this);
Weight weight = query.createWeight(searcher);
float sum = weight.sumOfSquaredWeights();
- float norm = searcher.getSimilarity().queryNorm(sum);
+ float norm = getSimilarity(searcher).queryNorm(sum);
weight.normalize(norm);
return weight;
}
@@ -161,6 +161,15 @@
}
return result;
}
+
+ /** Expert: Returns the Similarity implementation to be used for this query.
+ * Subclasses may override this method to specify their own Similarity
+ * implementation, perhaps one that delegates through that of the Searcher.
+ * By default the Searcher's Similarity implementation is returned.*/
+ public Similarity getSimilarity(Searcher searcher) {
+ return searcher.getSimilarity();
+ }
+
/** Returns a clone of this query. */
1.9 +2 -2 jakarta-lucene/src/java/org/apache/lucene/search/TermQuery.java
Index: TermQuery.java
===================================================================
RCS file: /home/cvs/jakarta-lucene/src/java/org/apache/lucene/search/TermQuery.java,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- TermQuery.java 15 Dec 2003 22:26:13 -0000 1.8
+++ TermQuery.java 6 Feb 2004 19:19:20 -0000 1.9
@@ -80,7 +80,7 @@
public float getValue() { return value; }
public float sumOfSquaredWeights() throws IOException {
- idf = searcher.getSimilarity().idf(term, searcher); // compute idf
+ idf = getSimilarity(searcher).idf(term, searcher); // compute idf
queryWeight = idf * getBoost(); // compute query weight
return queryWeight * queryWeight; // square it
}
@@ -97,7 +97,7 @@
if (termDocs == null)
return null;
- return new TermScorer(this, termDocs, searcher.getSimilarity(),
+ return new TermScorer(this, termDocs, getSimilarity(searcher),
reader.norms(term.field()));
}
1.3 +2 -2 jakarta-lucene/src/java/org/apache/lucene/search/spans/SpanWeight.java
Index: SpanWeight.java
===================================================================
RCS file: /home/cvs/jakarta-lucene/src/java/org/apache/lucene/search/spans/SpanWeight.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- SpanWeight.java 2 Feb 2004 13:27:52 -0000 1.2
+++ SpanWeight.java 6 Feb 2004 19:19:20 -0000 1.3
@@ -51,7 +51,7 @@
public float getValue() { return value; }
public float sumOfSquaredWeights() throws IOException {
- idf = searcher.getSimilarity().idf(terms, searcher);
+ idf = this.query.getSimilarity(searcher).idf(terms, searcher);
queryWeight = idf * query.getBoost(); // compute query weight
return queryWeight * queryWeight; // square it
}
@@ -64,7 +64,7 @@
public Scorer scorer(IndexReader reader) throws IOException {
return new SpanScorer(query.getSpans(reader), this,
- searcher.getSimilarity(),
+ query.getSimilarity(searcher),
reader.norms(query.getField()));
}
---------------------------------------------------------------------
To unsubscribe, e-mail: lucene-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: lucene-dev-help@jakarta.apache.org