From b86ded6faecc973e34e7b4670dbce44621f2b754 Mon Sep 17 00:00:00 2001 From: Michael McCandless Date: Tue, 7 Apr 2009 10:59:22 +0000 Subject: [PATCH] LUCENE-1582: enable FieldCache.Parser to stop early git-svn-id: https://svn.apache.org/repos/asf/lucene/java/trunk@762684 13f79535-47bb-0310-9956-ffa450edef68 --- .../apache/lucene/search/ExtendedFieldCacheImpl.java | 2 ++ src/java/org/apache/lucene/search/FieldCache.java | 12 ++++++++++++ .../org/apache/lucene/search/FieldCacheImpl.java | 4 ++++ 3 files changed, 18 insertions(+) diff --git a/src/java/org/apache/lucene/search/ExtendedFieldCacheImpl.java b/src/java/org/apache/lucene/search/ExtendedFieldCacheImpl.java index 626ee281864..abe4c4cac1e 100644 --- a/src/java/org/apache/lucene/search/ExtendedFieldCacheImpl.java +++ b/src/java/org/apache/lucene/search/ExtendedFieldCacheImpl.java @@ -73,6 +73,7 @@ class ExtendedFieldCacheImpl extends FieldCacheImpl implements ExtendedFieldCach retArray[termDocs.doc()] = termval; } } while (termEnum.next()); + } catch (StopFillCacheException stop) { } finally { termDocs.close(); termEnum.close(); @@ -113,6 +114,7 @@ class ExtendedFieldCacheImpl extends FieldCacheImpl implements ExtendedFieldCach retArray[termDocs.doc()] = termval; } } while (termEnum.next()); + } catch (StopFillCacheException stop) { } finally { termDocs.close(); termEnum.close(); diff --git a/src/java/org/apache/lucene/search/FieldCache.java b/src/java/org/apache/lucene/search/FieldCache.java index 09815b57254..a852c596e17 100644 --- a/src/java/org/apache/lucene/search/FieldCache.java +++ b/src/java/org/apache/lucene/search/FieldCache.java @@ -82,6 +82,18 @@ public interface FieldCache { public interface Parser { } + /** + * Expert: when thrown from a custom Parser, this stops + * processing terms and returns the current FieldCache + * array. + * + *

NOTE: This API is experimental and likely to + * change in incompatible ways, or be removed entirely, in + * the next release. + */ + public static class StopFillCacheException extends RuntimeException { + } + /** Interface to parse bytes from document fields. * @see FieldCache#getBytes(IndexReader, String, FieldCache.ByteParser) */ diff --git a/src/java/org/apache/lucene/search/FieldCacheImpl.java b/src/java/org/apache/lucene/search/FieldCacheImpl.java index 7f062c3ad79..33ee6bdb5f0 100644 --- a/src/java/org/apache/lucene/search/FieldCacheImpl.java +++ b/src/java/org/apache/lucene/search/FieldCacheImpl.java @@ -196,6 +196,7 @@ implements FieldCache { retArray[termDocs.doc()] = termval; } } while (termEnum.next()); + } catch (StopFillCacheException stop) { } finally { termDocs.close(); termEnum.close(); @@ -235,6 +236,7 @@ implements FieldCache { retArray[termDocs.doc()] = termval; } } while (termEnum.next()); + } catch (StopFillCacheException stop) { } finally { termDocs.close(); termEnum.close(); @@ -274,6 +276,7 @@ implements FieldCache { retArray[termDocs.doc()] = termval; } } while (termEnum.next()); + } catch (StopFillCacheException stop) { } finally { termDocs.close(); termEnum.close(); @@ -315,6 +318,7 @@ implements FieldCache { retArray[termDocs.doc()] = termval; } } while (termEnum.next()); + } catch (StopFillCacheException stop) { } finally { termDocs.close(); termEnum.close();