You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by tf...@apache.org on 2019/02/08 23:10:44 UTC
[lucene-solr] branch master updated: LUCENE-8662: Change
TermsEnum.seekExact(BytesRef) to abstract
This is an automated email from the ASF dual-hosted git repository.
tflobbe pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/lucene-solr.git
The following commit(s) were added to refs/heads/master by this push:
new a3a4ecd LUCENE-8662: Change TermsEnum.seekExact(BytesRef) to abstract
a3a4ecd is described below
commit a3a4ecd80b062d7567f4092fd43feb3e3f521333
Author: yyuan2 <yy...@apple.com>
AuthorDate: Mon Jan 28 13:06:04 2019 -0800
LUCENE-8662: Change TermsEnum.seekExact(BytesRef) to abstract
---
lucene/CHANGES.txt | 3 +++
lucene/MIGRATE.txt | 7 ++++++
.../codecs/lucene70/Lucene70DocValuesProducer.java | 5 +++++
.../lucene/codecs/blockterms/BlockTermsReader.java | 5 +++++
.../lucene/codecs/memory/DirectPostingsFormat.java | 5 +++++
.../lucene/codecs/memory/FSTOrdTermsReader.java | 5 +++++
.../lucene/codecs/memory/FSTTermsReader.java | 5 +++++
.../simpletext/SimpleTextTermVectorsReader.java | 5 +++++
.../compressing/CompressingTermVectorsReader.java | 5 +++++
.../codecs/lucene80/Lucene80DocValuesProducer.java | 5 +++++
.../org/apache/lucene/index/FilterLeafReader.java | 5 +++++
.../org/apache/lucene/index/FreqProxFields.java | 5 +++++
.../java/org/apache/lucene/index/TermsEnum.java | 25 ++++++++++++++++------
.../test/org/apache/lucene/index/TestCodecs.java | 5 +++++
.../codecs/ramonly/RAMOnlyPostingsFormat.java | 5 +++++
.../apache/lucene/index/RandomPostingsTester.java | 5 +++++
.../org/apache/solr/uninverting/DocTermOrds.java | 5 +++++
17 files changed, 98 insertions(+), 7 deletions(-)
diff --git a/lucene/CHANGES.txt b/lucene/CHANGES.txt
index 84e9683..03e5781 100644
--- a/lucene/CHANGES.txt
+++ b/lucene/CHANGES.txt
@@ -30,6 +30,9 @@ Other
API Changes
+* LUCENE-8662: TermsEnum.seekExact(BytesRef) to abstract and delegate seekExact(BytesRef)
+ in FilterLeafReader.FilterTermsEnum. (Jeffery Yuan via Tomás Fernández Löbbe, Simon Willnauer)
+
* LUCENE-8469: Deprecated StringHelper.compare has been removed. (Dawid Weiss)
* LUCENE-8039: Introduce a "delta distance" method set to GeoDistance. This
diff --git a/lucene/MIGRATE.txt b/lucene/MIGRATE.txt
index c005bc0..16e8101 100644
--- a/lucene/MIGRATE.txt
+++ b/lucene/MIGRATE.txt
@@ -1,5 +1,12 @@
# Apache Lucene Migration Guide
+## TermsEnum.seekExact(BytesRef) is abstract (LUCENE-8662) ##
+
+TermsEnum.seekExact has been changed to abstract, so non-abstract subclass must implement it.
+The default implementation can be seekCeil(text) == SeekStatus.FOUND.
+This method is performance critical, so subclass SHOULD have its own implementation
+if possible instead of using the default implementation.
+
## RAMDirectory, RAMFile, RAMInputStream, RAMOutputStream removed ##
RAM-based directory implementation have been removed. (LUCENE-8474).
diff --git a/lucene/backward-codecs/src/java/org/apache/lucene/codecs/lucene70/Lucene70DocValuesProducer.java b/lucene/backward-codecs/src/java/org/apache/lucene/codecs/lucene70/Lucene70DocValuesProducer.java
index b0f6e84..f5d5780 100644
--- a/lucene/backward-codecs/src/java/org/apache/lucene/codecs/lucene70/Lucene70DocValuesProducer.java
+++ b/lucene/backward-codecs/src/java/org/apache/lucene/codecs/lucene70/Lucene70DocValuesProducer.java
@@ -1032,6 +1032,11 @@ final class Lucene70DocValuesProducer extends DocValuesProducer implements Close
}
@Override
+ public boolean seekExact(BytesRef text) throws IOException {
+ return seekCeil(text) == SeekStatus.FOUND;
+ }
+
+ @Override
public void seekExact(long ord) throws IOException {
if (ord < 0 || ord >= entry.termsDictSize) {
throw new IndexOutOfBoundsException();
diff --git a/lucene/codecs/src/java/org/apache/lucene/codecs/blockterms/BlockTermsReader.java b/lucene/codecs/src/java/org/apache/lucene/codecs/blockterms/BlockTermsReader.java
index 4260dc3..9ac0e34 100644
--- a/lucene/codecs/src/java/org/apache/lucene/codecs/blockterms/BlockTermsReader.java
+++ b/lucene/codecs/src/java/org/apache/lucene/codecs/blockterms/BlockTermsReader.java
@@ -686,6 +686,11 @@ public class BlockTermsReader extends FieldsProducer {
}
@Override
+ public boolean seekExact(BytesRef text) throws IOException {
+ return seekCeil(text) == SeekStatus.FOUND;
+ }
+
+ @Override
public void seekExact(long ord) throws IOException {
//System.out.println("BTR.seek by ord ord=" + ord);
if (indexEnum == null) {
diff --git a/lucene/codecs/src/java/org/apache/lucene/codecs/memory/DirectPostingsFormat.java b/lucene/codecs/src/java/org/apache/lucene/codecs/memory/DirectPostingsFormat.java
index 15c0025..50ab83d 100644
--- a/lucene/codecs/src/java/org/apache/lucene/codecs/memory/DirectPostingsFormat.java
+++ b/lucene/codecs/src/java/org/apache/lucene/codecs/memory/DirectPostingsFormat.java
@@ -1507,6 +1507,11 @@ public final class DirectPostingsFormat extends PostingsFormat {
public void seekExact(long ord) {
throw new UnsupportedOperationException();
}
+
+ @Override
+ public boolean seekExact(BytesRef text) throws IOException {
+ return seekCeil(text) == SeekStatus.FOUND;
+ }
}
}
diff --git a/lucene/codecs/src/java/org/apache/lucene/codecs/memory/FSTOrdTermsReader.java b/lucene/codecs/src/java/org/apache/lucene/codecs/memory/FSTOrdTermsReader.java
index 2b948ff..12f51f9 100644
--- a/lucene/codecs/src/java/org/apache/lucene/codecs/memory/FSTOrdTermsReader.java
+++ b/lucene/codecs/src/java/org/apache/lucene/codecs/memory/FSTOrdTermsReader.java
@@ -627,6 +627,11 @@ public class FSTOrdTermsReader extends FieldsProducer {
}
@Override
+ public boolean seekExact(BytesRef text) throws IOException {
+ return seekCeil(text) == SeekStatus.FOUND;
+ }
+
+ @Override
public SeekStatus seekCeil(BytesRef target) throws IOException {
throw new UnsupportedOperationException();
}
diff --git a/lucene/codecs/src/java/org/apache/lucene/codecs/memory/FSTTermsReader.java b/lucene/codecs/src/java/org/apache/lucene/codecs/memory/FSTTermsReader.java
index 7afbc7c..a8cd0ff 100644
--- a/lucene/codecs/src/java/org/apache/lucene/codecs/memory/FSTTermsReader.java
+++ b/lucene/codecs/src/java/org/apache/lucene/codecs/memory/FSTTermsReader.java
@@ -520,6 +520,11 @@ public class FSTTermsReader extends FieldsProducer {
}
@Override
+ public boolean seekExact(BytesRef text) throws IOException {
+ return seekCeil(text) == SeekStatus.FOUND;
+ }
+
+ @Override
public SeekStatus seekCeil(BytesRef target) throws IOException {
decoded = false;
doSeekCeil(target);
diff --git a/lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextTermVectorsReader.java b/lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextTermVectorsReader.java
index a306e8c..ecbf5cb 100644
--- a/lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextTermVectorsReader.java
+++ b/lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextTermVectorsReader.java
@@ -359,6 +359,11 @@ public class SimpleTextTermVectorsReader extends TermVectorsReader {
}
@Override
+ public boolean seekExact(BytesRef text) throws IOException {
+ return seekCeil(text) == SeekStatus.FOUND;
+ }
+
+ @Override
public void seekExact(long ord) throws IOException {
throw new UnsupportedOperationException();
}
diff --git a/lucene/core/src/java/org/apache/lucene/codecs/compressing/CompressingTermVectorsReader.java b/lucene/core/src/java/org/apache/lucene/codecs/compressing/CompressingTermVectorsReader.java
index cbe1050..5dd3a64 100644
--- a/lucene/core/src/java/org/apache/lucene/codecs/compressing/CompressingTermVectorsReader.java
+++ b/lucene/core/src/java/org/apache/lucene/codecs/compressing/CompressingTermVectorsReader.java
@@ -907,6 +907,11 @@ public final class CompressingTermVectorsReader extends TermVectorsReader implem
}
@Override
+ public boolean seekExact(BytesRef text) throws IOException {
+ return seekCeil(text) == SeekStatus.FOUND;
+ }
+
+ @Override
public void seekExact(long ord) throws IOException {
throw new UnsupportedOperationException();
}
diff --git a/lucene/core/src/java/org/apache/lucene/codecs/lucene80/Lucene80DocValuesProducer.java b/lucene/core/src/java/org/apache/lucene/codecs/lucene80/Lucene80DocValuesProducer.java
index e0ece52..bbef30a 100644
--- a/lucene/core/src/java/org/apache/lucene/codecs/lucene80/Lucene80DocValuesProducer.java
+++ b/lucene/core/src/java/org/apache/lucene/codecs/lucene80/Lucene80DocValuesProducer.java
@@ -974,6 +974,11 @@ final class Lucene80DocValuesProducer extends DocValuesProducer implements Close
}
@Override
+ public boolean seekExact(BytesRef text) throws IOException {
+ return seekCeil(text) == SeekStatus.FOUND;
+ }
+
+ @Override
public void seekExact(long ord) throws IOException {
if (ord < 0 || ord >= entry.termsDictSize) {
throw new IndexOutOfBoundsException();
diff --git a/lucene/core/src/java/org/apache/lucene/index/FilterLeafReader.java b/lucene/core/src/java/org/apache/lucene/index/FilterLeafReader.java
index 418e7a8..5d12766 100644
--- a/lucene/core/src/java/org/apache/lucene/index/FilterLeafReader.java
+++ b/lucene/core/src/java/org/apache/lucene/index/FilterLeafReader.java
@@ -178,6 +178,11 @@ public abstract class FilterLeafReader extends LeafReader {
public SeekStatus seekCeil(BytesRef text) throws IOException {
return in.seekCeil(text);
}
+
+ @Override
+ public boolean seekExact(BytesRef text) throws IOException {
+ return in.seekExact(text);
+ }
@Override
public void seekExact(long ord) throws IOException {
diff --git a/lucene/core/src/java/org/apache/lucene/index/FreqProxFields.java b/lucene/core/src/java/org/apache/lucene/index/FreqProxFields.java
index f902022..b1615c3 100644
--- a/lucene/core/src/java/org/apache/lucene/index/FreqProxFields.java
+++ b/lucene/core/src/java/org/apache/lucene/index/FreqProxFields.java
@@ -180,6 +180,11 @@ class FreqProxFields extends Fields {
}
}
+ @Override
+ public boolean seekExact(BytesRef text) throws IOException {
+ return seekCeil(text) == SeekStatus.FOUND;
+ }
+
public void seekExact(long ord) {
this.ord = (int) ord;
int textStart = postingsArray.textStarts[sortedTermIDs[this.ord]];
diff --git a/lucene/core/src/java/org/apache/lucene/index/TermsEnum.java b/lucene/core/src/java/org/apache/lucene/index/TermsEnum.java
index e1e48ef..7750bbb 100644
--- a/lucene/core/src/java/org/apache/lucene/index/TermsEnum.java
+++ b/lucene/core/src/java/org/apache/lucene/index/TermsEnum.java
@@ -65,13 +65,19 @@ public abstract class TermsEnum implements BytesRefIterator {
NOT_FOUND
};
- /** Attempts to seek to the exact term, returning
- * true if the term is found. If this returns false, the
- * enum is unpositioned. For some codecs, seekExact may
- * be substantially faster than {@link #seekCeil}. */
- public boolean seekExact(BytesRef text) throws IOException {
- return seekCeil(text) == SeekStatus.FOUND;
- }
+ /**
+ * Attempts to seek to the exact term, returning true if the term is found. If this returns false, the enum is
+ * unpositioned. For some codecs, seekExact may be substantially faster than {@link #seekCeil}.
+ * <p>
+ *
+ * The default implementation can be <code>seekCeil(text) == SeekStatus.FOUND; </code><br>
+ * But this method is performance critical. In some cases, the default implementation may be slow and consume huge memory,
+ * so subclass SHOULD have its own implementation if possible.
+ *
+ * @return true if the term is found; return false if the enum is unpositioned.
+ */
+ public abstract boolean seekExact(BytesRef text) throws IOException;
+
/** Seeks to the specified term, if it exists, or to the
* next (ceiling) term. Returns SeekStatus to
@@ -207,6 +213,11 @@ public abstract class TermsEnum implements BytesRefIterator {
public SeekStatus seekCeil(BytesRef term) { return SeekStatus.END; }
@Override
+ public boolean seekExact(BytesRef text) throws IOException {
+ return seekCeil(text) == SeekStatus.FOUND;
+ }
+
+ @Override
public void seekExact(long ord) {}
@Override
diff --git a/lucene/core/src/test/org/apache/lucene/index/TestCodecs.java b/lucene/core/src/test/org/apache/lucene/index/TestCodecs.java
index 5ff0dde..6955d65 100644
--- a/lucene/core/src/test/org/apache/lucene/index/TestCodecs.java
+++ b/lucene/core/src/test/org/apache/lucene/index/TestCodecs.java
@@ -654,6 +654,11 @@ public class TestCodecs extends LuceneTestCase {
}
@Override
+ public boolean seekExact(BytesRef text) throws IOException {
+ return seekCeil(text) == SeekStatus.FOUND;
+ }
+
+ @Override
public void seekExact(long ord) {
throw new UnsupportedOperationException();
}
diff --git a/lucene/test-framework/src/java/org/apache/lucene/codecs/ramonly/RAMOnlyPostingsFormat.java b/lucene/test-framework/src/java/org/apache/lucene/codecs/ramonly/RAMOnlyPostingsFormat.java
index 8a2b042..e519ce0 100644
--- a/lucene/test-framework/src/java/org/apache/lucene/codecs/ramonly/RAMOnlyPostingsFormat.java
+++ b/lucene/test-framework/src/java/org/apache/lucene/codecs/ramonly/RAMOnlyPostingsFormat.java
@@ -443,6 +443,11 @@ public final class RAMOnlyPostingsFormat extends PostingsFormat {
}
}
}
+
+ @Override
+ public boolean seekExact(BytesRef text) throws IOException {
+ return seekCeil(text) == SeekStatus.FOUND;
+ }
@Override
public void seekExact(long ord) {
diff --git a/lucene/test-framework/src/java/org/apache/lucene/index/RandomPostingsTester.java b/lucene/test-framework/src/java/org/apache/lucene/index/RandomPostingsTester.java
index 6da2761..e4f1e4c 100644
--- a/lucene/test-framework/src/java/org/apache/lucene/index/RandomPostingsTester.java
+++ b/lucene/test-framework/src/java/org/apache/lucene/index/RandomPostingsTester.java
@@ -565,6 +565,11 @@ public class RandomPostingsTester {
}
@Override
+ public boolean seekExact(BytesRef text) throws IOException {
+ return seekCeil(text) == SeekStatus.FOUND;
+ }
+
+ @Override
public void seekExact(long ord) {
throw new UnsupportedOperationException();
}
diff --git a/solr/core/src/java/org/apache/solr/uninverting/DocTermOrds.java b/solr/core/src/java/org/apache/solr/uninverting/DocTermOrds.java
index 736be37..4ce085c 100644
--- a/solr/core/src/java/org/apache/solr/uninverting/DocTermOrds.java
+++ b/solr/core/src/java/org/apache/solr/uninverting/DocTermOrds.java
@@ -704,6 +704,11 @@ public class DocTermOrds implements Accountable {
}
@Override
+ public boolean seekExact(BytesRef text) throws IOException {
+ return seekCeil(text) == SeekStatus.FOUND;
+ }
+
+ @Override
public void seekExact(long targetOrd) throws IOException {
int delta = (int) (targetOrd - ordBase - ord);
//System.out.println(" seek(ord) targetOrd=" + targetOrd + " delta=" + delta + " ord=" + ord + " ii=" + indexInterval);