diff --git a/solr/core/src/test/org/apache/solr/schema/NumericFieldsTest.java b/solr/core/src/test/org/apache/solr/schema/NumericFieldsTest.java index fe5975ed058..17ded2f32e3 100644 --- a/solr/core/src/test/org/apache/solr/schema/NumericFieldsTest.java +++ b/solr/core/src/test/org/apache/solr/schema/NumericFieldsTest.java @@ -51,12 +51,15 @@ public class NumericFieldsTest extends SolrTestCaseJ4 { public void testSortMissingFirstLast() { clearIndex(); + // NOTE: segments may be merged in any order, so we can't make any assumptions about + // the relative order of M1 vs M2 unless we have a secondary sort assertU(adoc("id", "M1")); assertU(adoc(getDoc("+4", 4, "2011-04-04T00:00:00Z"))); assertU(adoc(getDoc("+5", 5, "2011-05-05T00:00:00Z"))); assertU(adoc(getDoc("-3", -3, "2011-01-01T00:00:00Z"))); assertU(adoc("id", "M2")); assertU(commit()); + // 'normal' sorting. Missing Values are 0 String suffix = ""; for (String t : types) { @@ -64,8 +67,8 @@ public class NumericFieldsTest extends SolrTestCaseJ4 { assertQ("Sorting Asc: " + t + suffix, req("fl", "id", "q", "*:*", "sort", (t + suffix) + " asc"), "//*[@numFound='5']", - "//result/doc[1]/str[@name='id'][.='M1']", - "//result/doc[2]/str[@name='id'][.='M2']", + "//result/doc[1]/str[@name='id'][starts-with(.,'M')]", + "//result/doc[2]/str[@name='id'][starts-with(.,'M')]", "//result/doc[3]/str[@name='id'][.='-3']", "//result/doc[4]/str[@name='id'][.='+4']", "//result/doc[5]/str[@name='id'][.='+5']" @@ -77,6 +80,26 @@ public class NumericFieldsTest extends SolrTestCaseJ4 { "//result/doc[1]/str[@name='id'][.='+5']", "//result/doc[2]/str[@name='id'][.='+4']", "//result/doc[3]/str[@name='id'][.='-3']", + "//result/doc[4]/str[@name='id'][starts-with(.,'M')]", + "//result/doc[5]/str[@name='id'][starts-with(.,'M')]" + ); + + assertQ("Sorting Asc w/secondary on id desc: " + t + suffix, + req("fl", "id", "q", "*:*", "sort", (t + suffix) + " asc, id desc"), + "//*[@numFound='5']", + "//result/doc[1]/str[@name='id'][.='M2']", + "//result/doc[2]/str[@name='id'][.='M1']", + "//result/doc[3]/str[@name='id'][.='-3']", + "//result/doc[4]/str[@name='id'][.='+4']", + "//result/doc[5]/str[@name='id'][.='+5']" + ); + + assertQ("Sorting Desc w/secondary on id asc: " + t + suffix, + req("fl", "id", "q", "*:*", "sort", (t + suffix) + " desc, id asc"), + "//*[@numFound='5']", + "//result/doc[1]/str[@name='id'][.='+5']", + "//result/doc[2]/str[@name='id'][.='+4']", + "//result/doc[3]/str[@name='id'][.='-3']", "//result/doc[4]/str[@name='id'][.='M1']", "//result/doc[5]/str[@name='id'][.='M2']" ); @@ -85,8 +108,8 @@ public class NumericFieldsTest extends SolrTestCaseJ4 { req("fl", "id", "q", "*:*", "sort", (t + suffix) + " asc"), "//*[@numFound='5']", "//result/doc[1]/str[@name='id'][.='-3']", - "//result/doc[2]/str[@name='id'][.='M1']", - "//result/doc[3]/str[@name='id'][.='M2']", + "//result/doc[2]/str[@name='id'][starts-with(.,'M')]", + "//result/doc[3]/str[@name='id'][starts-with(.,'M')]", "//result/doc[4]/str[@name='id'][.='+4']", "//result/doc[5]/str[@name='id'][.='+5']" ); @@ -96,6 +119,26 @@ public class NumericFieldsTest extends SolrTestCaseJ4 { "//*[@numFound='5']", "//result/doc[1]/str[@name='id'][.='+5']", "//result/doc[2]/str[@name='id'][.='+4']", + "//result/doc[3]/str[@name='id'][starts-with(.,'M')]", + "//result/doc[4]/str[@name='id'][starts-with(.,'M')]", + "//result/doc[5]/str[@name='id'][.='-3']" + ); + + assertQ("Sorting Asc w/secondary on id desc: " + t + suffix, + req("fl", "id", "q", "*:*", "sort", (t + suffix) + " asc, id desc"), + "//*[@numFound='5']", + "//result/doc[1]/str[@name='id'][.='-3']", + "//result/doc[2]/str[@name='id'][.='M2']", + "//result/doc[3]/str[@name='id'][.='M1']", + "//result/doc[4]/str[@name='id'][.='+4']", + "//result/doc[5]/str[@name='id'][.='+5']" + ); + + assertQ("Sorting Desc w/secondary on id asc: " + t + suffix, + req("fl", "id", "q", "*:*", "sort", (t + suffix) + " desc, id asc"), + "//*[@numFound='5']", + "//result/doc[1]/str[@name='id'][.='+5']", + "//result/doc[2]/str[@name='id'][.='+4']", "//result/doc[3]/str[@name='id'][.='M1']", "//result/doc[4]/str[@name='id'][.='M2']", "//result/doc[5]/str[@name='id'][.='-3']" @@ -114,13 +157,32 @@ public class NumericFieldsTest extends SolrTestCaseJ4 { "//result/doc[1]/str[@name='id'][.='-3']", "//result/doc[2]/str[@name='id'][.='+4']", "//result/doc[3]/str[@name='id'][.='+5']", - "//result/doc[4]/str[@name='id'][.='M1']", - "//result/doc[5]/str[@name='id'][.='M2']" + "//result/doc[4]/str[@name='id'][starts-with(.,'M')]", + "//result/doc[5]/str[@name='id'][starts-with(.,'M')]" ); - // This does not match assertQ("Sorting Desc: " + t + suffix, - req("fl", "id", "q", "*:*", "sort", (t + suffix) + " desc", "indent", "on"), + req("fl", "id", "q", "*:*", "sort", (t + suffix) + " desc"), + "//*[@numFound='5']", + "//result/doc[1]/str[@name='id'][.='+5']", + "//result/doc[2]/str[@name='id'][.='+4']", + "//result/doc[3]/str[@name='id'][.='-3']", + "//result/doc[4]/str[@name='id'][starts-with(.,'M')]", + "//result/doc[5]/str[@name='id'][starts-with(.,'M')]" + ); + + assertQ("Sorting Asc w/secondary on id desc: " + t + suffix, + req("fl", "id", "q", "*:*", "sort", (t + suffix) + " asc, id desc"), + "//*[@numFound='5']", + "//result/doc[1]/str[@name='id'][.='-3']", + "//result/doc[2]/str[@name='id'][.='+4']", + "//result/doc[3]/str[@name='id'][.='+5']", + "//result/doc[4]/str[@name='id'][.='M2']", + "//result/doc[5]/str[@name='id'][.='M1']" + ); + + assertQ("Sorting Desc w/secondary on id asc: " + t + suffix, + req("fl", "id", "q", "*:*", "sort", (t + suffix) + " desc, id asc"), "//*[@numFound='5']", "//result/doc[1]/str[@name='id'][.='+5']", "//result/doc[2]/str[@name='id'][.='+4']", @@ -134,18 +196,37 @@ public class NumericFieldsTest extends SolrTestCaseJ4 { suffix = "_first"; for (String t : types) { assertQ("Sorting Asc: " + t + suffix, - req("fl", "id", "q", "*:*", "sort", (t + suffix) + " asc", "indent", "on"), + req("fl", "id", "q", "*:*", "sort", (t + suffix) + " asc"), "//*[@numFound='5']", - "//result/doc[1]/str[@name='id'][.='M1']", - "//result/doc[2]/str[@name='id'][.='M2']", + "//result/doc[1]/str[@name='id'][starts-with(.,'M')]", + "//result/doc[2]/str[@name='id'][starts-with(.,'M')]", "//result/doc[3]/str[@name='id'][.='-3']", "//result/doc[4]/str[@name='id'][.='+4']", "//result/doc[5]/str[@name='id'][.='+5']" ); - // This does not match assertQ("Sorting Desc: " + t + suffix, - req("fl", "id", "q", "*:*", "sort", (t + suffix) + " desc", "indent", "on"), + req("fl", "id", "q", "*:*", "sort", (t + suffix) + " desc"), + "//*[@numFound='5']", + "//result/doc[1]/str[@name='id'][starts-with(.,'M')]", + "//result/doc[2]/str[@name='id'][starts-with(.,'M')]", + "//result/doc[3]/str[@name='id'][.='+5']", + "//result/doc[4]/str[@name='id'][.='+4']", + "//result/doc[5]/str[@name='id'][.='-3']" + ); + + assertQ("Sorting Asc w/secondary on id desc: " + t + suffix, + req("fl", "id", "q", "*:*", "sort", (t + suffix) + " asc, id desc"), + "//*[@numFound='5']", + "//result/doc[1]/str[@name='id'][.='M2']", + "//result/doc[2]/str[@name='id'][.='M1']", + "//result/doc[3]/str[@name='id'][.='-3']", + "//result/doc[4]/str[@name='id'][.='+4']", + "//result/doc[5]/str[@name='id'][.='+5']" + ); + + assertQ("Sorting Desc w/secondary on id asc: " + t + suffix, + req("fl", "id", "q", "*:*", "sort", (t + suffix) + " desc, id asc"), "//*[@numFound='5']", "//result/doc[1]/str[@name='id'][.='M1']", "//result/doc[2]/str[@name='id'][.='M2']", @@ -153,6 +234,7 @@ public class NumericFieldsTest extends SolrTestCaseJ4 { "//result/doc[4]/str[@name='id'][.='+4']", "//result/doc[5]/str[@name='id'][.='-3']" ); + } } }