From 2bccce27773d4cca972e15e4156340b63c3108a3 Mon Sep 17 00:00:00 2001 From: Robert Muir Date: Wed, 13 Feb 2013 20:46:50 +0000 Subject: [PATCH] don't cache objects for non-existent/unindexed sortedset git-svn-id: https://svn.apache.org/repos/asf/lucene/dev/branches/lucene4765@1445913 13f79535-47bb-0310-9956-ffa450edef68 --- .../java/org/apache/lucene/search/FieldCacheImpl.java | 6 +++++- .../test/org/apache/lucene/search/TestFieldCache.java | 10 +++++++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/lucene/core/src/java/org/apache/lucene/search/FieldCacheImpl.java b/lucene/core/src/java/org/apache/lucene/search/FieldCacheImpl.java index f4a191ec1e0..e44495654b8 100644 --- a/lucene/core/src/java/org/apache/lucene/search/FieldCacheImpl.java +++ b/lucene/core/src/java/org/apache/lucene/search/FieldCacheImpl.java @@ -1379,8 +1379,12 @@ class FieldCacheImpl implements FieldCache { } final FieldInfo info = reader.getFieldInfos().fieldInfo(field); - if (info != null && info.hasDocValues()) { + if (info == null) { + return SortedSetDocValues.EMPTY; + } else if (info.hasDocValues()) { throw new IllegalStateException("Type mismatch: " + field + " was indexed as " + info.getDocValuesType()); + } else if (!info.isIndexed()) { + return SortedSetDocValues.EMPTY; } DocTermOrds dto = (DocTermOrds) caches.get(DocTermOrds.class).get(reader, new CacheKey(field, null), false); diff --git a/lucene/core/src/test/org/apache/lucene/search/TestFieldCache.java b/lucene/core/src/test/org/apache/lucene/search/TestFieldCache.java index d6a4655070d..fb5ea2b39aa 100644 --- a/lucene/core/src/test/org/apache/lucene/search/TestFieldCache.java +++ b/lucene/core/src/test/org/apache/lucene/search/TestFieldCache.java @@ -544,7 +544,6 @@ public class TestFieldCache extends LuceneTestCase { assertEquals(SortedSetDocValues.NO_MORE_ORDS, sortedSet.nextOrd()); assertEquals(2, sortedSet.getValueCount()); - // nocommit: not right bits = FieldCache.DEFAULT.getDocsWithField(ar, "sortedset"); assertTrue(bits instanceof Bits.MatchAllBits); @@ -594,6 +593,10 @@ public class TestFieldCache extends LuceneTestCase { sorted.get(0, scratch); assertTrue(scratch.bytes == BinaryDocValues.MISSING); + SortedSetDocValues sortedSet = cache.getDocTermOrds(ar, "bogusmultivalued"); + sortedSet.setDocument(0); + assertEquals(SortedSetDocValues.NO_MORE_ORDS, sortedSet.nextOrd()); + Bits bits = cache.getDocsWithField(ar, "bogusbits"); assertFalse(bits.get(0)); @@ -615,6 +618,7 @@ public class TestFieldCache extends LuceneTestCase { doc.add(new StoredField("bogusdoubles", "bogus")); doc.add(new StoredField("bogusterms", "bogus")); doc.add(new StoredField("bogustermsindex", "bogus")); + doc.add(new StoredField("bogusmultivalued", "bogus")); doc.add(new StoredField("bogusbits", "bogus")); iw.addDocument(doc); DirectoryReader ir = iw.getReader(); @@ -654,6 +658,10 @@ public class TestFieldCache extends LuceneTestCase { sorted.get(0, scratch); assertTrue(scratch.bytes == BinaryDocValues.MISSING); + SortedSetDocValues sortedSet = cache.getDocTermOrds(ar, "bogusmultivalued"); + sortedSet.setDocument(0); + assertEquals(SortedSetDocValues.NO_MORE_ORDS, sortedSet.nextOrd()); + Bits bits = cache.getDocsWithField(ar, "bogusbits"); assertFalse(bits.get(0));