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) {