You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by mv...@apache.org on 2013/01/27 21:14:02 UTC

svn commit: r1439166 - in /lucene/dev/trunk/lucene: CHANGES.txt join/src/java/org/apache/lucene/search/join/JoinUtil.java join/src/java/org/apache/lucene/search/join/TermsIncludingScoreQuery.java join/src/java/org/apache/lucene/search/join/TermsQuery.java

Author: mvg
Date: Sun Jan 27 20:14:02 2013
New Revision: 1439166

URL: http://svn.apache.org/viewvc?rev=1439166&view=rev
Log:
LUCENE-4704: Make join queries override hashcode and equals methods.

Modified:
    lucene/dev/trunk/lucene/CHANGES.txt
    lucene/dev/trunk/lucene/join/src/java/org/apache/lucene/search/join/JoinUtil.java
    lucene/dev/trunk/lucene/join/src/java/org/apache/lucene/search/join/TermsIncludingScoreQuery.java
    lucene/dev/trunk/lucene/join/src/java/org/apache/lucene/search/join/TermsQuery.java

Modified: lucene/dev/trunk/lucene/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/CHANGES.txt?rev=1439166&r1=1439165&r2=1439166&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/CHANGES.txt (original)
+++ lucene/dev/trunk/lucene/CHANGES.txt Sun Jan 27 20:14:02 2013
@@ -104,6 +104,9 @@ Bug Fixes
   degrees and barely any height, it would generate so many indexed terms
   (> 500k) that it could even cause an OutOfMemoryError. Fixed. (David Smiley)
 
+* LUCENE-4704: Make join queries override hashcode and equals methods.
+  (Martijn van Groningen)
+
 ======================= Lucene 4.1.0 =======================
 
 Changes in backwards compatibility policy

Modified: lucene/dev/trunk/lucene/join/src/java/org/apache/lucene/search/join/JoinUtil.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/join/src/java/org/apache/lucene/search/join/JoinUtil.java?rev=1439166&r1=1439165&r2=1439166&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/join/src/java/org/apache/lucene/search/join/JoinUtil.java (original)
+++ lucene/dev/trunk/lucene/join/src/java/org/apache/lucene/search/join/JoinUtil.java Sun Jan 27 20:14:02 2013
@@ -71,7 +71,7 @@ public final class JoinUtil {
       case None:
         TermsCollector termsCollector = TermsCollector.create(fromField, multipleValuesPerDocument);
         fromSearcher.search(fromQuery, termsCollector);
-        return new TermsQuery(toField, termsCollector.getCollectorTerms());
+        return new TermsQuery(toField, fromQuery, termsCollector.getCollectorTerms());
       case Total:
       case Max:
       case Avg:

Modified: lucene/dev/trunk/lucene/join/src/java/org/apache/lucene/search/join/TermsIncludingScoreQuery.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/join/src/java/org/apache/lucene/search/join/TermsIncludingScoreQuery.java?rev=1439166&r1=1439165&r2=1439166&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/join/src/java/org/apache/lucene/search/join/TermsIncludingScoreQuery.java (original)
+++ lucene/dev/trunk/lucene/join/src/java/org/apache/lucene/search/join/TermsIncludingScoreQuery.java Sun Jan 27 20:14:02 2013
@@ -93,6 +93,35 @@ class TermsIncludingScoreQuery extends Q
   }
 
   @Override
+  public boolean equals(Object obj) {
+    if (this == obj) {
+      return true;
+    } if (!super.equals(obj)) {
+      return false;
+    } if (getClass() != obj.getClass()) {
+      return false;
+    }
+
+    TermsIncludingScoreQuery other = (TermsIncludingScoreQuery) obj;
+    if (!field.equals(other.field)) {
+      return false;
+    }
+    if (!unwrittenOriginalQuery.equals(other.unwrittenOriginalQuery)) {
+      return false;
+    }
+    return true;
+  }
+
+  @Override
+  public int hashCode() {
+    final int prime = 31;
+    int result = super.hashCode();
+    result += prime * field.hashCode();
+    result += prime * unwrittenOriginalQuery.hashCode();
+    return result;
+  }
+
+  @Override
   public Weight createWeight(IndexSearcher searcher) throws IOException {
     final Weight originalWeight = originalQuery.createWeight(searcher);
     return new Weight() {

Modified: lucene/dev/trunk/lucene/join/src/java/org/apache/lucene/search/join/TermsQuery.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/join/src/java/org/apache/lucene/search/join/TermsQuery.java?rev=1439166&r1=1439165&r2=1439166&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/join/src/java/org/apache/lucene/search/join/TermsQuery.java (original)
+++ lucene/dev/trunk/lucene/join/src/java/org/apache/lucene/search/join/TermsQuery.java Sun Jan 27 20:14:02 2013
@@ -21,6 +21,7 @@ import org.apache.lucene.index.FilteredT
 import org.apache.lucene.index.Terms;
 import org.apache.lucene.index.TermsEnum;
 import org.apache.lucene.search.MultiTermQuery;
+import org.apache.lucene.search.Query;
 import org.apache.lucene.util.AttributeSource;
 import org.apache.lucene.util.BytesRef;
 import org.apache.lucene.util.BytesRefHash;
@@ -37,13 +38,15 @@ import java.util.Comparator;
 class TermsQuery extends MultiTermQuery {
 
   private final BytesRefHash terms;
+  private final Query fromQuery; // Used for equals() only
 
   /**
    * @param field The field that should contain terms that are specified in the previous parameter
    * @param terms The terms that matching documents should have. The terms must be sorted by natural order.
    */
-  TermsQuery(String field, BytesRefHash terms) {
+  TermsQuery(String field, Query fromQuery, BytesRefHash terms) {
     super(field);
+    this.fromQuery = fromQuery;
     this.terms = terms;
   }
 
@@ -63,6 +66,31 @@ class TermsQuery extends MultiTermQuery 
         '}';
   }
 
+  @Override
+  public boolean equals(Object obj) {
+    if (this == obj) {
+      return true;
+    } if (!super.equals(obj)) {
+      return false;
+    } if (getClass() != obj.getClass()) {
+      return false;
+    }
+
+    TermsQuery other = (TermsQuery) obj;
+    if (!fromQuery.equals(other.fromQuery)) {
+      return false;
+    }
+    return true;
+  }
+
+  @Override
+  public int hashCode() {
+    final int prime = 31;
+    int result = super.hashCode();
+    result += prime * fromQuery.hashCode();
+    return result;
+  }
+
   static class SeekingTermSetTermsEnum extends FilteredTermsEnum {
 
     private final BytesRefHash terms;