You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by so...@apache.org on 2019/07/02 22:25:35 UTC

[lucene-solr] branch master updated: LUCENE-8895: switch all FST usage to enable array-with-gaps encoding also, deprecate unused Util.getByOutput

This is an automated email from the ASF dual-hosted git repository.

sokolov 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 81e63e8  LUCENE-8895: switch all FST usage to enable array-with-gaps encoding   also, deprecate unused Util.getByOutput
81e63e8 is described below

commit 81e63e8fec298fcfe9d9212754d5910339b518a9
Author: Michael Sokolov <so...@amazon.com>
AuthorDate: Sun Jun 30 11:13:43 2019 -0400

    LUCENE-8895: switch all FST usage to enable array-with-gaps encoding
      also, deprecate unused Util.getByOutput
---
 .../ja/util/TokenInfoDictionaryBuilder.java        |   2 +-
 .../ko/util/TokenInfoDictionaryBuilder.java        |   2 +-
 .../blocktreeords/OrdsBlockTreeTermsWriter.java    |   2 +-
 .../codecs/blocktreeords/OrdsSegmentTermsEnum.java |   2 +-
 .../codecs/blocktree/BlockTreeTermsWriter.java     |   2 +-
 .../java/org/apache/lucene/util/fst/Builder.java   |   9 +-
 .../src/java/org/apache/lucene/util/fst/FST.java   |   3 +-
 .../src/java/org/apache/lucene/util/fst/Util.java  |   1 +
 .../test/org/apache/lucene/util/fst/Test2BFST.java |   6 +-
 .../test/org/apache/lucene/util/fst/TestFSTs.java  |   8 +-
 .../org/apache/lucene/util/fst/TestFstDirect.java  | 133 +--------------------
 .../idversion/VersionBlockTreeTermsWriter.java     |   2 +-
 .../search/suggest/fst/FSTCompletionBuilder.java   |   2 +-
 .../java/org/apache/lucene/util/fst/FSTTester.java |   2 +-
 14 files changed, 25 insertions(+), 151 deletions(-)

diff --git a/lucene/analysis/kuromoji/src/java/org/apache/lucene/analysis/ja/util/TokenInfoDictionaryBuilder.java b/lucene/analysis/kuromoji/src/java/org/apache/lucene/analysis/ja/util/TokenInfoDictionaryBuilder.java
index 3274fef..4bb8d59 100644
--- a/lucene/analysis/kuromoji/src/java/org/apache/lucene/analysis/ja/util/TokenInfoDictionaryBuilder.java
+++ b/lucene/analysis/kuromoji/src/java/org/apache/lucene/analysis/ja/util/TokenInfoDictionaryBuilder.java
@@ -97,7 +97,7 @@ class TokenInfoDictionaryBuilder {
     lines.sort(Comparator.comparing(entry -> entry[0]));
 
     PositiveIntOutputs fstOutput = PositiveIntOutputs.getSingleton();
-    Builder<Long> fstBuilder = new Builder<>(FST.INPUT_TYPE.BYTE2, 0, 0, true, true, Integer.MAX_VALUE, fstOutput, true, 15, false);
+    Builder<Long> fstBuilder = new Builder<>(FST.INPUT_TYPE.BYTE2, 0, 0, true, true, Integer.MAX_VALUE, fstOutput, true, 15);
     IntsRefBuilder scratch = new IntsRefBuilder();
     long ord = -1; // first ord will be 0
     String lastValue = null;
diff --git a/lucene/analysis/nori/src/tools/java/org/apache/lucene/analysis/ko/util/TokenInfoDictionaryBuilder.java b/lucene/analysis/nori/src/tools/java/org/apache/lucene/analysis/ko/util/TokenInfoDictionaryBuilder.java
index f46d967..d5fb73f 100644
--- a/lucene/analysis/nori/src/tools/java/org/apache/lucene/analysis/ko/util/TokenInfoDictionaryBuilder.java
+++ b/lucene/analysis/nori/src/tools/java/org/apache/lucene/analysis/ko/util/TokenInfoDictionaryBuilder.java
@@ -109,7 +109,7 @@ public class TokenInfoDictionaryBuilder {
     System.out.println("  encode...");
 
     PositiveIntOutputs fstOutput = PositiveIntOutputs.getSingleton();
-    Builder<Long> fstBuilder = new Builder<>(FST.INPUT_TYPE.BYTE2, 0, 0, true, true, Integer.MAX_VALUE, fstOutput, true, 15, false);
+    Builder<Long> fstBuilder = new Builder<>(FST.INPUT_TYPE.BYTE2, 0, 0, true, true, Integer.MAX_VALUE, fstOutput, true, 15);
     IntsRefBuilder scratch = new IntsRefBuilder();
     long ord = -1; // first ord will be 0
     String lastValue = null;
diff --git a/lucene/codecs/src/java/org/apache/lucene/codecs/blocktreeords/OrdsBlockTreeTermsWriter.java b/lucene/codecs/src/java/org/apache/lucene/codecs/blocktreeords/OrdsBlockTreeTermsWriter.java
index 1f0e175..769c732 100644
--- a/lucene/codecs/src/java/org/apache/lucene/codecs/blocktreeords/OrdsBlockTreeTermsWriter.java
+++ b/lucene/codecs/src/java/org/apache/lucene/codecs/blocktreeords/OrdsBlockTreeTermsWriter.java
@@ -363,7 +363,7 @@ public final class OrdsBlockTreeTermsWriter extends FieldsConsumer {
 
       final Builder<Output> indexBuilder = new Builder<>(FST.INPUT_TYPE.BYTE1,
                                                          0, 0, true, false, Integer.MAX_VALUE,
-                                                         FST_OUTPUTS, true, 15, false);
+                                                         FST_OUTPUTS, true, 15);
       //if (DEBUG) {
       //  System.out.println("  compile index for prefix=" + prefix);
       //}
diff --git a/lucene/codecs/src/java/org/apache/lucene/codecs/blocktreeords/OrdsSegmentTermsEnum.java b/lucene/codecs/src/java/org/apache/lucene/codecs/blocktreeords/OrdsSegmentTermsEnum.java
index 756cda8..e03d7e6 100644
--- a/lucene/codecs/src/java/org/apache/lucene/codecs/blocktreeords/OrdsSegmentTermsEnum.java
+++ b/lucene/codecs/src/java/org/apache/lucene/codecs/blocktreeords/OrdsSegmentTermsEnum.java
@@ -1084,7 +1084,7 @@ public final class OrdsSegmentTermsEnum extends BaseTermsEnum {
         result.grow(1+upto);
         fr.index.readFirstRealTargetArc(arc.target, arc, fstReader);
 
-        if (arc.bytesPerArc != 0) {
+        if (arc.bytesPerArc != 0 && arc.arcIdx > Integer.MIN_VALUE) {
           // System.out.println("  array arcs");
           int low = 0;
           int high = arc.numArcs-1;
diff --git a/lucene/core/src/java/org/apache/lucene/codecs/blocktree/BlockTreeTermsWriter.java b/lucene/core/src/java/org/apache/lucene/codecs/blocktree/BlockTreeTermsWriter.java
index e2ee9ac..3059d5a 100644
--- a/lucene/core/src/java/org/apache/lucene/codecs/blocktree/BlockTreeTermsWriter.java
+++ b/lucene/core/src/java/org/apache/lucene/codecs/blocktree/BlockTreeTermsWriter.java
@@ -456,7 +456,7 @@ public final class BlockTreeTermsWriter extends FieldsConsumer {
       final ByteSequenceOutputs outputs = ByteSequenceOutputs.getSingleton();
       final Builder<BytesRef> indexBuilder = new Builder<>(FST.INPUT_TYPE.BYTE1,
                                                            0, 0, true, false, Integer.MAX_VALUE,
-                                                           outputs, true, 15, true);
+                                                           outputs, true, 15);
       //if (DEBUG) {
       //  System.out.println("  compile index for prefix=" + prefix);
       //}
diff --git a/lucene/core/src/java/org/apache/lucene/util/fst/Builder.java b/lucene/core/src/java/org/apache/lucene/util/fst/Builder.java
index cf3a433..bb9a682 100644
--- a/lucene/core/src/java/org/apache/lucene/util/fst/Builder.java
+++ b/lucene/core/src/java/org/apache/lucene/util/fst/Builder.java
@@ -73,8 +73,6 @@ public class Builder<T> {
 
   private final IntsRefBuilder lastInput = new IntsRefBuilder();
 
-  final boolean useDirectArcAddressing;
-
   // NOTE: cutting this over to ArrayList instead loses ~6%
   // in build performance on 9.8M Wikipedia terms; so we
   // left this as an array:
@@ -99,11 +97,11 @@ public class Builder<T> {
 
   /**
    * Instantiates an FST/FSA builder without any pruning. A shortcut to {@link
-   * #Builder(FST.INPUT_TYPE, int, int, boolean, boolean, int, Outputs, boolean, int, boolean)} with
+   * #Builder(FST.INPUT_TYPE, int, int, boolean, boolean, int, Outputs, boolean, int)} with
    * pruning options turned off.
    */
   public Builder(FST.INPUT_TYPE inputType, Outputs<T> outputs) {
-    this(inputType, 0, 0, true, true, Integer.MAX_VALUE, outputs, true, 15, false);
+    this(inputType, 0, 0, true, true, Integer.MAX_VALUE, outputs, true, 15);
   }
 
   /**
@@ -154,13 +152,12 @@ public class Builder<T> {
    */
   public Builder(FST.INPUT_TYPE inputType, int minSuffixCount1, int minSuffixCount2, boolean doShareSuffix,
                  boolean doShareNonSingletonNodes, int shareMaxTailLength, Outputs<T> outputs,
-                 boolean allowArrayArcs, int bytesPageBits, boolean useDirectArcAddressing) {
+                 boolean allowArrayArcs, int bytesPageBits) {
     this.minSuffixCount1 = minSuffixCount1;
     this.minSuffixCount2 = minSuffixCount2;
     this.doShareNonSingletonNodes = doShareNonSingletonNodes;
     this.shareMaxTailLength = shareMaxTailLength;
     this.allowArrayArcs = allowArrayArcs;
-    this.useDirectArcAddressing = useDirectArcAddressing;
     fst = new FST<>(inputType, outputs, bytesPageBits);
     bytes = fst.bytes;
     assert bytes != null;
diff --git a/lucene/core/src/java/org/apache/lucene/util/fst/FST.java b/lucene/core/src/java/org/apache/lucene/util/fst/FST.java
index c13323f..f308f1a 100644
--- a/lucene/core/src/java/org/apache/lucene/util/fst/FST.java
+++ b/lucene/core/src/java/org/apache/lucene/util/fst/FST.java
@@ -647,8 +647,7 @@ public final class FST<T> implements Accountable {
       // array that may have holes in it so that we can address the arcs directly by label without
       // binary search
       int labelRange = nodeIn.arcs[nodeIn.numArcs - 1].label - nodeIn.arcs[0].label + 1;
-      boolean writeDirectly = builder.useDirectArcAddressing && labelRange > 0
-          && labelRange < Builder.DIRECT_ARC_LOAD_FACTOR * nodeIn.numArcs;
+      boolean writeDirectly = labelRange > 0 && labelRange < Builder.DIRECT_ARC_LOAD_FACTOR * nodeIn.numArcs;
 
       //System.out.println("write int @pos=" + (fixedArrayStart-4) + " numArcs=" + nodeIn.numArcs);
       // create the header
diff --git a/lucene/core/src/java/org/apache/lucene/util/fst/Util.java b/lucene/core/src/java/org/apache/lucene/util/fst/Util.java
index f8dd6fd..9083a3d 100644
--- a/lucene/core/src/java/org/apache/lucene/util/fst/Util.java
+++ b/lucene/core/src/java/org/apache/lucene/util/fst/Util.java
@@ -105,6 +105,7 @@ public final class Util {
    *  For example, simple ordinals (0, 1,
    *  2, ...), or file offsets (when appending to a file)
    *  fit this. */
+  @Deprecated
   public static IntsRef getByOutput(FST<Long> fst, long targetOutput) throws IOException {
 
     final BytesReader in = fst.getBytesReader();
diff --git a/lucene/core/src/test/org/apache/lucene/util/fst/Test2BFST.java b/lucene/core/src/test/org/apache/lucene/util/fst/Test2BFST.java
index 48898bc..cc093b3 100644
--- a/lucene/core/src/test/org/apache/lucene/util/fst/Test2BFST.java
+++ b/lucene/core/src/test/org/apache/lucene/util/fst/Test2BFST.java
@@ -55,7 +55,7 @@ public class Test2BFST extends LuceneTestCase {
         Outputs<Object> outputs = NoOutputs.getSingleton();
         Object NO_OUTPUT = outputs.getNoOutput();
         final Builder<Object> b = new Builder<>(FST.INPUT_TYPE.BYTE1, 0, 0, true, true, Integer.MAX_VALUE, outputs,
-                                                true, 15, true);
+                                                true, 15);
 
         int count = 0;
         Random r = new Random(seed);
@@ -137,7 +137,7 @@ public class Test2BFST extends LuceneTestCase {
         System.out.println("\nTEST: 3 GB size; outputs=bytes");
         Outputs<BytesRef> outputs = ByteSequenceOutputs.getSingleton();
         final Builder<BytesRef> b = new Builder<>(FST.INPUT_TYPE.BYTE1, 0, 0, true, true, Integer.MAX_VALUE, outputs,
-                                                  true, 15, true);
+                                                  true, 15);
 
         byte[] outputBytes = new byte[20];
         BytesRef output = new BytesRef(outputBytes);
@@ -217,7 +217,7 @@ public class Test2BFST extends LuceneTestCase {
         System.out.println("\nTEST: 3 GB size; outputs=long");
         Outputs<Long> outputs = PositiveIntOutputs.getSingleton();
         final Builder<Long> b = new Builder<>(FST.INPUT_TYPE.BYTE1, 0, 0, true, true, Integer.MAX_VALUE, outputs,
-                                              true, 15, true);
+                                              true, 15);
 
         long output = 1;
 
diff --git a/lucene/core/src/test/org/apache/lucene/util/fst/TestFSTs.java b/lucene/core/src/test/org/apache/lucene/util/fst/TestFSTs.java
index f728854..d882fae 100644
--- a/lucene/core/src/test/org/apache/lucene/util/fst/TestFSTs.java
+++ b/lucene/core/src/test/org/apache/lucene/util/fst/TestFSTs.java
@@ -327,7 +327,7 @@ public class TestFSTs extends LuceneTestCase {
     writer.close();
     final PositiveIntOutputs outputs = PositiveIntOutputs.getSingleton();
 
-    Builder<Long> builder = new Builder<>(FST.INPUT_TYPE.BYTE1, 0, 0, true, true, Integer.MAX_VALUE, outputs, true, 15, true);
+    Builder<Long> builder = new Builder<>(FST.INPUT_TYPE.BYTE1, 0, 0, true, true, Integer.MAX_VALUE, outputs, true, 15);
 
     boolean storeOrd = random().nextBoolean();
     if (VERBOSE) {
@@ -468,7 +468,7 @@ public class TestFSTs extends LuceneTestCase {
       this.inputMode = inputMode;
       this.outputs = outputs;
 
-      builder = new Builder<>(inputMode == 0 ? FST.INPUT_TYPE.BYTE1 : FST.INPUT_TYPE.BYTE4, 0, prune, prune == 0, true, Integer.MAX_VALUE, outputs, !noArcArrays, 15, true);
+      builder = new Builder<>(inputMode == 0 ? FST.INPUT_TYPE.BYTE1 : FST.INPUT_TYPE.BYTE4, 0, prune, prune == 0, true, Integer.MAX_VALUE, outputs, !noArcArrays, 15);
     }
 
     protected abstract T getOutput(IntsRef input, int ord) throws IOException;
@@ -1110,7 +1110,7 @@ public class TestFSTs extends LuceneTestCase {
   public void testFinalOutputOnEndState() throws Exception {
     final PositiveIntOutputs outputs = PositiveIntOutputs.getSingleton();
 
-    final Builder<Long> builder = new Builder<>(FST.INPUT_TYPE.BYTE4, 2, 0, true, true, Integer.MAX_VALUE, outputs, true, 15, true);
+    final Builder<Long> builder = new Builder<>(FST.INPUT_TYPE.BYTE4, 2, 0, true, true, Integer.MAX_VALUE, outputs, true, 15);
     builder.add(Util.toUTF32("stat", new IntsRefBuilder()), 17L);
     builder.add(Util.toUTF32("station", new IntsRefBuilder()), 10L);
     final FST<Long> fst = builder.finish();
@@ -1124,7 +1124,7 @@ public class TestFSTs extends LuceneTestCase {
 
   public void testInternalFinalState() throws Exception {
     final PositiveIntOutputs outputs = PositiveIntOutputs.getSingleton();
-    final Builder<Long> builder = new Builder<>(FST.INPUT_TYPE.BYTE1, 0, 0, true, true, Integer.MAX_VALUE, outputs, true, 15, true);
+    final Builder<Long> builder = new Builder<>(FST.INPUT_TYPE.BYTE1, 0, 0, true, true, Integer.MAX_VALUE, outputs, true, 15);
     builder.add(Util.toIntsRef(new BytesRef("stat"), new IntsRefBuilder()), outputs.getNoOutput());
     builder.add(Util.toIntsRef(new BytesRef("station"), new IntsRefBuilder()), outputs.getNoOutput());
     final FST<Long> fst = builder.finish();
diff --git a/lucene/core/src/test/org/apache/lucene/util/fst/TestFstDirect.java b/lucene/core/src/test/org/apache/lucene/util/fst/TestFstDirect.java
index 0d353d1..5ec4441 100644
--- a/lucene/core/src/test/org/apache/lucene/util/fst/TestFstDirect.java
+++ b/lucene/core/src/test/org/apache/lucene/util/fst/TestFstDirect.java
@@ -16,18 +16,12 @@
  */
 package org.apache.lucene.util.fst;
 
-import java.io.BufferedReader;
-import java.io.InputStreamReader;
 import java.nio.file.Files;
 import java.nio.file.Paths;
 import java.util.ArrayList;
 import java.util.Arrays;
-import java.util.Collections;
-import java.util.HashSet;
 import java.util.List;
 import java.util.Locale;
-import java.util.Random;
-import java.util.Set;
 
 import org.apache.lucene.store.ByteArrayDataInput;
 import org.apache.lucene.store.DataInput;
@@ -36,147 +30,30 @@ import org.apache.lucene.util.IntsRefBuilder;
 import org.apache.lucene.util.LuceneTestCase;
 
 import org.junit.Before;
-import org.junit.Ignore;
 
 public class TestFstDirect extends LuceneTestCase {
 
-  private static final int COUNT = 10_000_000;
   private List<String> words;
-  private Set<String> dict;
-  private Random random;
 
   @Before
   public void before() {
     words = new ArrayList<>();
-    random = new Random(random().nextLong());
   }
 
   public void testDenseWithGap() throws Exception {
     //words.addAll(Arrays.asList("apple", "berry", "cherry", "damson", "fig", "grape"));
     words.addAll(Arrays.asList("ah", "bi", "cj", "dk", "fl", "gm"));
-    final BytesRefFSTEnum<Object> fstEnum = new BytesRefFSTEnum<>(buildFST(words, true));
+    final BytesRefFSTEnum<Object> fstEnum = new BytesRefFSTEnum<>(buildFST(words));
     for (String word : words) {
       assertNotNull(word + " not found", fstEnum.seekExact(new BytesRef(word)));
     }
   }
 
-  @Ignore("for performance testing")
-  public void testLookupIDs() throws Exception {
-    for (int i = 0; i < 10000000; i++) {
-      words.add(String.format(Locale.ROOT, "%09d", i));
-    }
-    FST<Object> baselineFST = buildFST(words, false);
-    FST<Object> optoFST = buildFST(words,true);
-    for (int i = 0; i < 10; i++) {
-      long seed = random().nextLong();
-      random.setSeed(seed);
-      long timeOpto = timeLookups(optoFST);
-      random.setSeed(seed);
-      long timeBase = timeLookups(baselineFST);
-      printf("Sought %d present terms in %d ms (baseline) vs %d ms (opto), a %d%% difference", COUNT, nsToMs(timeBase), nsToMs(timeOpto),
-             -100 * (timeBase - timeOpto) / timeBase);
-    }
-  }
-
-  @Ignore("for performance testing")
-  public void testRandomTerms() throws Exception {
-    for (int i = 0; i < 100000; i++) {
-      words.add(randomString());
-    }
-    Collections.sort(words);
-    FST<Object> baselineFST = buildFST(words, false);
-    FST<Object> optoFST = buildFST(words,true);
-    for (int i = 0; i < 10; i++) {
-      long seed = random().nextLong();
-      random.setSeed(seed);
-      long timeOpto = timeLookups(optoFST);
-      random.setSeed(seed);
-      long timeBase = timeLookups(baselineFST);
-      printf("Sought %d present terms in %d ms (baseline) vs %d ms (opto), a %d%% difference", COUNT, nsToMs(timeBase), nsToMs(timeOpto),
-             -100 * (timeBase - timeOpto) / timeBase);
-    }
-  }
-
-  @Ignore("requires english dictionary")
-  public void testLookupEnglishTerms() throws Exception {
-    FST<Object> baselineFST = buildEnglishFST(false);
-    FST<Object> optoFST = buildFST(words,true);
-    for (int i = 0; i < 10; i++) {
-      long seed = random().nextLong();
-      random.setSeed(seed);
-      long timeOpto = timeLookups(optoFST);
-      random.setSeed(seed);
-      long timeBase = timeLookups(baselineFST);
-      printf("Sought %d present terms in %d ms (baseline) vs %d ms (opto), a %d%% difference", COUNT, nsToMs(timeBase), nsToMs(timeOpto),
-             -100 * (timeBase - timeOpto) / timeBase);
-    }
-  }
-
-  private long timeLookups(FST<Object> fst) throws Exception {
-    final BytesRefFSTEnum<Object> fstEnumOpto = new BytesRefFSTEnum<>(fst);
-    long start = System.nanoTime();
-    for (int i = 0; i < COUNT; i++) {
-      assertNotNull(fstEnumOpto.seekExact(new BytesRef(words.get(random.nextInt(words.size())))));
-    }
-    return System.nanoTime() - start;
-  }
-
-  @Ignore("requires english dictionary")
-  public void testLookupRandomStrings() throws Exception {
-    dict = new HashSet<>(words);
-    List<String> tokens = new ArrayList<>();
-    for (int i = 0; i < 1_000_000; i++) {
-      String s;
-      do  {
-        s = randomString();
-      } while (dict.contains(s));
-      tokens.add(s);
-    }
-    final FST<Object> fstBase = buildEnglishFST(false);
-    final FST<Object> fstOpto = buildFST(words, true);
-    long seed = random().nextLong();
-    for (int i = 0; i < 10; i++) {
-      random.setSeed(seed);
-      long timeBase = timeLookupRandomStrings(fstBase, tokens);
-      random.setSeed(seed);
-      long timeOpto = timeLookupRandomStrings(fstOpto, tokens);
-      printf("Sought %d absent terms in %d ms (base) / %d ms (opto), a %d%% change", COUNT, nsToMs(timeBase), nsToMs(timeOpto),
-             -100 * (timeBase - timeOpto) / timeBase);
-    }
-  }
-
-  private long timeLookupRandomStrings(FST<Object> fst, List<String> tokens) throws Exception {
-    final BytesRefFSTEnum<Object> fstEnum = new BytesRefFSTEnum<>(fst);
-    long start = System.nanoTime();
-    for (int i = 0; i < COUNT; i++) {
-      fstEnum.seekExact(new BytesRef(tokens.get(random.nextInt(tokens.size()))));
-    }
-    return System.nanoTime() - start;
-  }
-
-  private String randomString() {
-    int len = random().nextInt(7) + 3;
-    StringBuilder buf = new StringBuilder();
-    for (int i = 0; i < len; i++) {
-      buf.append(random().nextInt(26) + 'a');
-    }
-    return buf.toString();
-  }
-
-  private FST<Object> buildEnglishFST(boolean useDirectAddressing) throws Exception {
-    try (BufferedReader reader = new BufferedReader(new InputStreamReader(getClass().getResourceAsStream("WORDS"), "ASCII"))) {
-      String line;
-      while ((line = reader.readLine()) != null) {
-        words.add(line);
-      }
-    }
-    return buildFST(words, useDirectAddressing);
-  }
 
-  private FST<Object> buildFST(List<String> words, boolean useDirectAddressing) throws Exception {
+  private FST<Object> buildFST(List<String> words) throws Exception {
     long start = System.nanoTime();
     final Outputs<Object> outputs = NoOutputs.getSingleton();
-    final Builder<Object> b = new Builder<>(FST.INPUT_TYPE.BYTE1, 0, 0, true, true, Integer.MAX_VALUE, outputs, true, 15, useDirectAddressing);
+    final Builder<Object> b = new Builder<>(FST.INPUT_TYPE.BYTE1, 0, 0, true, true, Integer.MAX_VALUE, outputs, true, 15);
 
     for (String word : words) {
       b.add(Util.toIntsRef(new BytesRef(word), new IntsRefBuilder()), outputs.getNoOutput());
@@ -187,11 +64,11 @@ public class TestFstDirect extends LuceneTestCase {
     return fst;
   }
 
-  static void printf(String format, Object ... values) {
+  private static void printf(String format, Object ... values) {
     System.out.println(String.format(Locale.ROOT, format, values));
   }
 
-  static long nsToMs(long ns) {
+  private static long nsToMs(long ns) {
     return ns / 1_000_000;
   }
 
diff --git a/lucene/sandbox/src/java/org/apache/lucene/codecs/idversion/VersionBlockTreeTermsWriter.java b/lucene/sandbox/src/java/org/apache/lucene/codecs/idversion/VersionBlockTreeTermsWriter.java
index eed09f6..3f0c2bd 100644
--- a/lucene/sandbox/src/java/org/apache/lucene/codecs/idversion/VersionBlockTreeTermsWriter.java
+++ b/lucene/sandbox/src/java/org/apache/lucene/codecs/idversion/VersionBlockTreeTermsWriter.java
@@ -352,7 +352,7 @@ public final class VersionBlockTreeTermsWriter extends FieldsConsumer {
 
       final Builder<Pair<BytesRef,Long>> indexBuilder = new Builder<>(FST.INPUT_TYPE.BYTE1,
                                                                       0, 0, true, false, Integer.MAX_VALUE,
-                                                                      FST_OUTPUTS, true, 15, false);
+                                                                      FST_OUTPUTS, true, 15);
       //if (DEBUG) {
       //  System.out.println("  compile index for prefix=" + prefix);
       //}
diff --git a/lucene/suggest/src/java/org/apache/lucene/search/suggest/fst/FSTCompletionBuilder.java b/lucene/suggest/src/java/org/apache/lucene/search/suggest/fst/FSTCompletionBuilder.java
index 7fbf237..3d20412 100644
--- a/lucene/suggest/src/java/org/apache/lucene/search/suggest/fst/FSTCompletionBuilder.java
+++ b/lucene/suggest/src/java/org/apache/lucene/search/suggest/fst/FSTCompletionBuilder.java
@@ -236,7 +236,7 @@ public class FSTCompletionBuilder {
     final Object empty = outputs.getNoOutput();
     final Builder<Object> builder = new Builder<>(
         FST.INPUT_TYPE.BYTE1, 0, 0, true, true, 
-        shareMaxTailLength, outputs, true, 15, true);
+        shareMaxTailLength, outputs, true, 15);
     
     BytesRefBuilder scratch = new BytesRefBuilder();
     BytesRef entry;
diff --git a/lucene/test-framework/src/java/org/apache/lucene/util/fst/FSTTester.java b/lucene/test-framework/src/java/org/apache/lucene/util/fst/FSTTester.java
index 79c4c3f..438a6dc 100644
--- a/lucene/test-framework/src/java/org/apache/lucene/util/fst/FSTTester.java
+++ b/lucene/test-framework/src/java/org/apache/lucene/util/fst/FSTTester.java
@@ -279,7 +279,7 @@ public class FSTTester<T> {
                                               allowRandomSuffixSharing ? TestUtil.nextInt(random, 1, 10) : Integer.MAX_VALUE,
                                               outputs,
                                               true,
-                                              15, true);
+                                              15);
 
     for(InputOutput<T> pair : pairs) {
       if (pair.output instanceof List) {