mirror of https://github.com/apache/lucene.git
LUCENE-7798: Add .equals and .hashCode to ToParentBlockJoinSortField
This commit is contained in:
parent
460b3b36e9
commit
e96dc4f21c
|
@ -106,6 +106,9 @@ Bug Fixes
|
|||
* LUCENE-7808: Fixed PayloadScoreQuery and SpanPayloadCheckQuery
|
||||
.equals and .hashCode methods. (Erik Hatcher)
|
||||
|
||||
* LUCENE-7798: Add .equals and .hashCode to ToParentBlockJoinSortField
|
||||
(Mikhail Khludnev)
|
||||
|
||||
Improvements
|
||||
|
||||
* LUCENE-7782: OfflineSorter now passes the total number of items it
|
||||
|
|
|
@ -207,4 +207,30 @@ public class ToParentBlockJoinSortField extends SortField {
|
|||
}
|
||||
};
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
final int prime = 31;
|
||||
int result = super.hashCode();
|
||||
result = prime * result + ((childFilter == null) ? 0 : childFilter.hashCode());
|
||||
result = prime * result + (order ? 1231 : 1237);
|
||||
result = prime * result + ((parentFilter == null) ? 0 : parentFilter.hashCode());
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
if (this == obj) return true;
|
||||
if (!super.equals(obj)) return false;
|
||||
if (getClass() != obj.getClass()) return false;
|
||||
ToParentBlockJoinSortField other = (ToParentBlockJoinSortField) obj;
|
||||
if (childFilter == null) {
|
||||
if (other.childFilter != null) return false;
|
||||
} else if (!childFilter.equals(other.childFilter)) return false;
|
||||
if (order != other.order) return false;
|
||||
if (parentFilter == null) {
|
||||
if (other.parentFilter != null) return false;
|
||||
} else if (!parentFilter.equals(other.parentFilter)) return false;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -18,6 +18,7 @@ package org.apache.lucene.search.join;
|
|||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.function.Supplier;
|
||||
|
||||
import org.apache.lucene.analysis.MockAnalyzer;
|
||||
import org.apache.lucene.document.Document;
|
||||
|
@ -237,9 +238,10 @@ public class TestBlockJoinSorting extends LuceneTestCase {
|
|||
assertEquals("i", ((BytesRef) ((FieldDoc) topDocs.scoreDocs[4]).fields[0]).utf8ToString());
|
||||
|
||||
// Sort by field ascending, order last
|
||||
sortField = new ToParentBlockJoinSortField(
|
||||
sortField = notEqual(sortField, () -> new ToParentBlockJoinSortField(
|
||||
"field2", SortField.Type.STRING, false, true, parentFilter, childFilter
|
||||
);
|
||||
));
|
||||
|
||||
sort = new Sort(sortField);
|
||||
topDocs = searcher.search(query, 5, sort);
|
||||
assertEquals(7, topDocs.totalHits);
|
||||
|
@ -256,9 +258,9 @@ public class TestBlockJoinSorting extends LuceneTestCase {
|
|||
assertEquals("k", ((BytesRef) ((FieldDoc) topDocs.scoreDocs[4]).fields[0]).utf8ToString());
|
||||
|
||||
// Sort by field descending, order last
|
||||
sortField = new ToParentBlockJoinSortField(
|
||||
sortField = notEqual(sortField, () -> new ToParentBlockJoinSortField(
|
||||
"field2", SortField.Type.STRING, true, parentFilter, childFilter
|
||||
);
|
||||
));
|
||||
sort = new Sort(sortField);
|
||||
topDocs = searcher.search(query, 5, sort);
|
||||
assertEquals(topDocs.totalHits, 7);
|
||||
|
@ -275,15 +277,17 @@ public class TestBlockJoinSorting extends LuceneTestCase {
|
|||
assertEquals("g", ((BytesRef) ((FieldDoc) topDocs.scoreDocs[4]).fields[0]).utf8ToString());
|
||||
|
||||
// Sort by field descending, order last, sort filter (filter_1:T)
|
||||
childFilter = new QueryBitSetProducer(new TermQuery((new Term("filter_1", "T"))));
|
||||
BitSetProducer childFilter1T = new QueryBitSetProducer(new TermQuery((new Term("filter_1", "T"))));
|
||||
query = new ToParentBlockJoinQuery(
|
||||
new TermQuery((new Term("filter_1", "T"))),
|
||||
parentFilter,
|
||||
ScoreMode.None
|
||||
);
|
||||
sortField = new ToParentBlockJoinSortField(
|
||||
"field2", SortField.Type.STRING, true, parentFilter, childFilter
|
||||
);
|
||||
|
||||
sortField = notEqual(sortField, () -> new ToParentBlockJoinSortField(
|
||||
"field2", SortField.Type.STRING, true, parentFilter, childFilter1T
|
||||
));
|
||||
|
||||
sort = new Sort(sortField);
|
||||
topDocs = searcher.search(query, 5, sort);
|
||||
assertEquals(6, topDocs.totalHits);
|
||||
|
@ -299,8 +303,27 @@ public class TestBlockJoinSorting extends LuceneTestCase {
|
|||
assertEquals(7, topDocs.scoreDocs[4].doc);
|
||||
assertEquals("e", ((BytesRef) ((FieldDoc) topDocs.scoreDocs[4]).fields[0]).utf8ToString());
|
||||
|
||||
sortField = notEqual(sortField, () -> new ToParentBlockJoinSortField(
|
||||
"field2", SortField.Type.STRING, true,
|
||||
new QueryBitSetProducer(new TermQuery(new Term("__type", "another")))
|
||||
, childFilter1T
|
||||
));
|
||||
|
||||
searcher.getIndexReader().close();
|
||||
dir.close();
|
||||
}
|
||||
|
||||
private ToParentBlockJoinSortField notEqual(ToParentBlockJoinSortField old, Supplier<ToParentBlockJoinSortField> create) {
|
||||
final ToParentBlockJoinSortField newObj = create.get();
|
||||
assertFalse(old.equals(newObj));
|
||||
assertNotSame( old, newObj);
|
||||
|
||||
final ToParentBlockJoinSortField bro = create.get();
|
||||
assertEquals(newObj, bro);
|
||||
assertEquals(newObj.hashCode(), bro.hashCode());
|
||||
assertNotSame( bro, newObj);
|
||||
|
||||
assertFalse(old.equals(bro));
|
||||
return newObj;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -39,6 +39,8 @@ import org.apache.solr.common.cloud.ZkStateReader;
|
|||
import org.junit.BeforeClass;
|
||||
import org.junit.Test;
|
||||
|
||||
import com.carrotsearch.randomizedtesting.annotations.Repeat;
|
||||
|
||||
public class TestCloudNestedDocsSort extends SolrCloudTestCase {
|
||||
|
||||
private static ArrayList<String> vals = new ArrayList<>();
|
||||
|
@ -113,7 +115,7 @@ public class TestCloudNestedDocsSort extends SolrCloudTestCase {
|
|||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
@Test @Repeat(iterations=2)
|
||||
public void test() throws SolrServerException, IOException {
|
||||
final boolean asc = random().nextBoolean();
|
||||
final String dir = asc ? "asc": "desc";
|
||||
|
|
|
@ -46,7 +46,6 @@ public class TestNestedDocsSort extends SolrTestCaseJ4 {
|
|||
parseAssertNe("childfield(name_s1,$q) asc", "childfield(surname_s1,$q2) desc");
|
||||
}
|
||||
|
||||
@AwaitsFix(bugUrl="https://issues.apache.org/jira/browse/LUCENE-7798")
|
||||
public void testEqualityUpToBlockJoin(){
|
||||
parseAssertNe("childfield(name_s1,$q) asc","childfield(name_s1,$q2) asc");
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue