You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by us...@apache.org on 2013/04/17 00:12:44 UTC

svn commit: r1468640 - in /lucene/dev/trunk: ./ lucene/ lucene/core/ lucene/core/src/test/org/apache/lucene/search/ lucene/queries/ solr/ solr/core/ solr/core/src/test/org/apache/solr/schema/

Author: uschindler
Date: Tue Apr 16 22:12:44 2013
New Revision: 1468640

URL: http://svn.apache.org/r1468640
Log:
Merged revision(s) 1468638 from lucene/dev/branches/branch_4x:
LUCENE-4937: Fix incorrect sorting of float/double values (+/-0, NaN).

Modified:
    lucene/dev/trunk/   (props changed)
    lucene/dev/trunk/lucene/   (props changed)
    lucene/dev/trunk/lucene/CHANGES.txt   (contents, props changed)
    lucene/dev/trunk/lucene/core/   (props changed)
    lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/TestSort.java
    lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/TestSortDocValues.java
    lucene/dev/trunk/lucene/queries/   (props changed)
    lucene/dev/trunk/solr/   (props changed)
    lucene/dev/trunk/solr/core/   (props changed)
    lucene/dev/trunk/solr/core/src/test/org/apache/solr/schema/DocValuesTest.java

Modified: lucene/dev/trunk/lucene/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/CHANGES.txt?rev=1468640&r1=1468639&r2=1468640&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/CHANGES.txt (original)
+++ lucene/dev/trunk/lucene/CHANGES.txt Tue Apr 16 22:12:44 2013
@@ -306,6 +306,9 @@ Bug Fixes
 * LUCENE-4504: Fix broken sort comparator in ValueSource.getSortField,
   used when sorting by a function query.  (Tom Shally via Robert Muir)
 
+* LUCENE-4937: Fix incorrect sorting of float/double values (+/-0, NaN).
+  (Robert Muir, Uwe Schindler)
+
 Documentation
 
 * LUCENE-4841: Added example SimpleSortedSetFacetsExample to show how

Modified: lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/TestSort.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/TestSort.java?rev=1468640&r1=1468639&r2=1468640&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/TestSort.java (original)
+++ lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/TestSort.java Tue Apr 16 22:12:44 2013
@@ -964,6 +964,33 @@ public class TestSort extends LuceneTest
     dir.close();
   }
   
+  /** Tests sorting on type double with +/- zero */
+  public void testDoubleSignedZero() throws IOException {
+    Directory dir = newDirectory();
+    RandomIndexWriter writer = new RandomIndexWriter(random(), dir);
+    Document doc = new Document();
+    doc.add(newStringField("value", "+0", Field.Store.YES));
+    writer.addDocument(doc);
+    doc = new Document();
+    doc.add(newStringField("value", "-0", Field.Store.YES));
+    writer.addDocument(doc);
+    doc = new Document();
+    IndexReader ir = writer.getReader();
+    writer.close();
+    
+    IndexSearcher searcher = newSearcher(ir);
+    Sort sort = new Sort(new SortField("value", SortField.Type.DOUBLE));
+
+    TopDocs td = searcher.search(new MatchAllDocsQuery(), 10, sort);
+    assertEquals(2, td.totalHits);
+    // numeric order
+    assertEquals("-0", searcher.doc(td.scoreDocs[0].doc).get("value"));
+    assertEquals("+0", searcher.doc(td.scoreDocs[1].doc).get("value"));
+
+    ir.close();
+    dir.close();
+  }
+  
   /** Tests sorting on type double with a missing value */
   public void testDoubleMissing() throws IOException {
     Directory dir = newDirectory();

Modified: lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/TestSortDocValues.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/TestSortDocValues.java?rev=1468640&r1=1468639&r2=1468640&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/TestSortDocValues.java (original)
+++ lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/TestSortDocValues.java Tue Apr 16 22:12:44 2013
@@ -602,6 +602,35 @@ public class TestSortDocValues extends L
     dir.close();
   }
   
+  /** Tests sorting on type double with +/- zero */
+  public void testDoubleSignedZero() throws IOException {
+    Directory dir = newDirectory();
+    RandomIndexWriter writer = new RandomIndexWriter(random(), dir);
+    Document doc = new Document();
+    doc.add(new DoubleDocValuesField("value", +0D));
+    doc.add(newStringField("value", "+0", Field.Store.YES));
+    writer.addDocument(doc);
+    doc = new Document();
+    doc.add(new DoubleDocValuesField("value", -0D));
+    doc.add(newStringField("value", "-0", Field.Store.YES));
+    writer.addDocument(doc);
+    doc = new Document();
+    IndexReader ir = writer.getReader();
+    writer.close();
+    
+    IndexSearcher searcher = newSearcher(ir);
+    Sort sort = new Sort(new SortField("value", SortField.Type.DOUBLE));
+
+    TopDocs td = searcher.search(new MatchAllDocsQuery(), 10, sort);
+    assertEquals(2, td.totalHits);
+    // numeric order
+    assertEquals("-0", searcher.doc(td.scoreDocs[0].doc).get("value"));
+    assertEquals("+0", searcher.doc(td.scoreDocs[1].doc).get("value"));
+
+    ir.close();
+    dir.close();
+  }
+  
   /** Tests sorting on type double in reverse */
   public void testDoubleReverse() throws IOException {
     Directory dir = newDirectory();

Modified: lucene/dev/trunk/solr/core/src/test/org/apache/solr/schema/DocValuesTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/test/org/apache/solr/schema/DocValuesTest.java?rev=1468640&r1=1468639&r2=1468640&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/test/org/apache/solr/schema/DocValuesTest.java (original)
+++ lucene/dev/trunk/solr/core/src/test/org/apache/solr/schema/DocValuesTest.java Tue Apr 16 22:12:44 2013
@@ -120,6 +120,26 @@ public class DocValuesTest extends SolrT
     assertQ(req("q", "*:*", "sort", "stringdv asc", "rows", "1", "fl", "id"),
         "//str[@name='id'][.='2']");
   }
+  
+  public void testDocValuesSorting2() {
+    assertU(adoc("id", "1", "doubledv", "12"));
+    assertU(adoc("id", "2", "doubledv", "50.567"));
+    assertU(adoc("id", "3", "doubledv", "+0"));
+    assertU(adoc("id", "4", "doubledv", "4.9E-324"));
+    assertU(adoc("id", "5", "doubledv", "-0"));
+    assertU(adoc("id", "6", "doubledv", "-5.123"));
+    assertU(adoc("id", "7", "doubledv", "1.7976931348623157E308"));
+    assertU(commit());
+    assertQ(req("fl", "id", "q", "*:*", "sort", "doubledv asc"),
+        "//result/doc[1]/str[@name='id'][.='6']",
+        "//result/doc[2]/str[@name='id'][.='5']",
+        "//result/doc[3]/str[@name='id'][.='3']",
+        "//result/doc[4]/str[@name='id'][.='4']",
+        "//result/doc[5]/str[@name='id'][.='1']",
+        "//result/doc[6]/str[@name='id'][.='2']",
+        "//result/doc[7]/str[@name='id'][.='7']"
+        );
+  }
 
   public void testDocValuesFaceting() {
     for (int i = 0; i < 50; ++i) {