blob: e8a02bd68c8d56b09d4efcf6c7934493fe3d1a2b [file] [log] [blame]
Index: lucene/src/test/org/apache/lucene/index/TestIndexWriter.java
===================================================================
--- lucene/src/test/org/apache/lucene/index/TestIndexWriter.java (revision 1188145)
+++ lucene/src/test/org/apache/lucene/index/TestIndexWriter.java (working copy)
@@ -1096,6 +1096,33 @@
reader.close();
dir.close();
}
+
+ public void testEmptyFieldNameEmptyTerm() throws IOException {
+ Directory dir = newDirectory();
+ IndexWriter writer = new IndexWriter(dir, newIndexWriterConfig( TEST_VERSION_CURRENT, new MockAnalyzer(random)));
+ Document doc = new Document();
+ // TODO: why do we throw IAE: name and value cannot both be empty in Field ctor?!
+ doc.add(newField("", "", Field.Store.NO, Field.Index.NOT_ANALYZED));
+ doc.add(newField("", "a", Field.Store.NO, Field.Index.NOT_ANALYZED));
+ doc.add(newField("", "b", Field.Store.NO, Field.Index.NOT_ANALYZED));
+ doc.add(newField("", "c", Field.Store.NO, Field.Index.NOT_ANALYZED));
+ writer.addDocument(doc);
+ writer.close();
+ IndexReader reader = IndexReader.open(dir, true);
+ IndexReader subreader = SegmentReader.getOnlySegmentReader(reader);
+ TermEnum te = subreader.terms();
+ assertTrue(te.next());
+ assertEquals(new Term("", ""), te.term());
+ assertTrue(te.next());
+ assertEquals(new Term("", "a"), te.term());
+ assertTrue(te.next());
+ assertEquals(new Term("", "b"), te.term());
+ assertTrue(te.next());
+ assertEquals(new Term("", "c"), te.term());
+ assertFalse(te.next());
+ reader.close();
+ dir.close();
+ }
private static final class MockIndexWriter extends IndexWriter {
Index: lucene/src/java/org/apache/lucene/index/TermInfosWriter.java
===================================================================
--- lucene/src/java/org/apache/lucene/index/TermInfosWriter.java (revision 1188145)
+++ lucene/src/java/org/apache/lucene/index/TermInfosWriter.java (working copy)
@@ -167,6 +167,11 @@
if (ch1 != ch2)
return ch1-ch2;
}
+ if (utf16Result1.length == 0 && lastFieldNumber == -1) {
+ // If there is a field named "" (empty string) with a term text of "" (empty string) then we
+ // will get 0 on this comparison, yet, it's "OK".
+ return -1;
+ }
return utf16Result1.length - utf16Result2.length;
}
Index: lucene/src/java/org/apache/lucene/document/Field.java
===================================================================
--- lucene/src/java/org/apache/lucene/document/Field.java (revision 1188145)
+++ lucene/src/java/org/apache/lucene/document/Field.java (working copy)
@@ -396,8 +396,6 @@
throw new NullPointerException("name cannot be null");
if (value == null)
throw new NullPointerException("value cannot be null");
- if (name.length() == 0 && value.length() == 0)
- throw new IllegalArgumentException("name and value cannot both be empty");
if (index == Index.NO && store == Store.NO)
throw new IllegalArgumentException("it doesn't make sense to have a field that "
+ "is neither indexed nor stored");