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