diff --git lucene/suggest/src/java/org/apache/lucene/search/suggest/analyzing/AnalyzingSuggester.java lucene/suggest/src/java/org/apache/lucene/search/suggest/analyzing/AnalyzingSuggester.java index ee681c7..921576b 100644 --- lucene/suggest/src/java/org/apache/lucene/search/suggest/analyzing/AnalyzingSuggester.java +++ lucene/suggest/src/java/org/apache/lucene/search/suggest/analyzing/AnalyzingSuggester.java @@ -74,8 +74,9 @@ import org.apache.lucene.util.fst.Util; * then the partial text "ghost chr..." could see the * suggestion "The Ghost of Christmas Past". Note that * position increments MUST NOT be preserved for this example - * to work, so you should call - * {@link #setPreservePositionIncrements(boolean) setPreservePositionIncrements(false)}. + * to work, so you should call the constructor with + * preservePositionIncrements parameter set to + * false * *

* If SynonymFilter is used to map wifi and wireless network to @@ -205,6 +206,14 @@ public class AnalyzingSuggester extends Lookup { } /** + * Calls {@link #AnalyzingSuggester(Analyzer, Analyzer, int, int, int, boolean) + * AnalyzingSuggester(indexAnalyzer, queryAnalyzer, options, + * maxSurfaceFormsPerAnalyzedForm, maxGraphExpansions, true)} + */ + public AnalyzingSuggester(Analyzer indexAnalyzer, Analyzer queryAnalyzer, int options, int maxSurfaceFormsPerAnalyzedForm, int maxGraphExpansions) { + this(indexAnalyzer, queryAnalyzer, options, maxSurfaceFormsPerAnalyzedForm, maxGraphExpansions, true); + } + /** * Creates a new suggester. * * @param indexAnalyzer Analyzer that will be used for @@ -219,8 +228,11 @@ public class AnalyzingSuggester extends Lookup { * @param maxGraphExpansions Maximum number of graph paths * to expand from the analyzed form. Set this to -1 for * no limit. + * @param preservePositionIncrements Whether position holes + * should appear in the automata */ - public AnalyzingSuggester(Analyzer indexAnalyzer, Analyzer queryAnalyzer, int options, int maxSurfaceFormsPerAnalyzedForm, int maxGraphExpansions) { + public AnalyzingSuggester(Analyzer indexAnalyzer, Analyzer queryAnalyzer, int options, int maxSurfaceFormsPerAnalyzedForm, int maxGraphExpansions, + boolean preservePositionIncrements) { this.indexAnalyzer = indexAnalyzer; this.queryAnalyzer = queryAnalyzer; if ((options & ~(EXACT_FIRST | PRESERVE_SEP)) != 0) { @@ -242,12 +254,6 @@ public class AnalyzingSuggester extends Lookup { throw new IllegalArgumentException("maxGraphExpansions must -1 (no limit) or > 0 (got: " + maxGraphExpansions + ")"); } this.maxGraphExpansions = maxGraphExpansions; - preservePositionIncrements = true; - } - - /** Whether to take position holes (position increment > 1) into account when - * building the automaton, true by default. */ - public void setPreservePositionIncrements(boolean preservePositionIncrements) { this.preservePositionIncrements = preservePositionIncrements; } diff --git lucene/suggest/src/java/org/apache/lucene/search/suggest/analyzing/FuzzySuggester.java lucene/suggest/src/java/org/apache/lucene/search/suggest/analyzing/FuzzySuggester.java index 2456a90..9c8b745 100644 --- lucene/suggest/src/java/org/apache/lucene/search/suggest/analyzing/FuzzySuggester.java +++ lucene/suggest/src/java/org/apache/lucene/search/suggest/analyzing/FuzzySuggester.java @@ -129,6 +129,19 @@ public final class FuzzySuggester extends AnalyzingSuggester { } /** + * Calls {@link #FuzzySuggester(Analyzer, Analyzer, int, int, int, boolean, int, boolean, int, int, boolean) + * FuzzySuggester(indexAnalyzer, queryAnalyzer, options, maxSurfaceFormsPerAnalyzedForm, maxGraphExpansions, + * true, maxEdits, transpositions, nonFuzzyPrefix, minFuzzyLength, unicodeAware)} + */ + public FuzzySuggester(Analyzer indexAnalyzer, Analyzer queryAnalyzer, + int options, int maxSurfaceFormsPerAnalyzedForm, int maxGraphExpansions, + int maxEdits, boolean transpositions, int nonFuzzyPrefix, + int minFuzzyLength, boolean unicodeAware) { + this(indexAnalyzer, queryAnalyzer, options, maxSurfaceFormsPerAnalyzedForm, + maxGraphExpansions, true, maxEdits, transpositions, nonFuzzyPrefix, + minFuzzyLength, unicodeAware); + } + /** * Creates a {@link FuzzySuggester} instance. * * @param indexAnalyzer Analyzer that will be used for @@ -143,6 +156,7 @@ public final class FuzzySuggester extends AnalyzingSuggester { * @param maxGraphExpansions Maximum number of graph paths * to expand from the analyzed form. Set this to -1 for * no limit. + * @param preservePositionIncrements Whether position holes should appear in the automaton * @param maxEdits must be >= 0 and <= {@link LevenshteinAutomata#MAXIMUM_SUPPORTED_DISTANCE} . * @param transpositions true if transpositions should be treated as a primitive * edit operation. If this is false, comparisons will implement the classic @@ -153,9 +167,9 @@ public final class FuzzySuggester extends AnalyzingSuggester { */ public FuzzySuggester(Analyzer indexAnalyzer, Analyzer queryAnalyzer, int options, int maxSurfaceFormsPerAnalyzedForm, int maxGraphExpansions, - int maxEdits, boolean transpositions, int nonFuzzyPrefix, - int minFuzzyLength, boolean unicodeAware) { - super(indexAnalyzer, queryAnalyzer, options, maxSurfaceFormsPerAnalyzedForm, maxGraphExpansions); + boolean preservePositionIncrements, int maxEdits, boolean transpositions, + int nonFuzzyPrefix, int minFuzzyLength, boolean unicodeAware) { + super(indexAnalyzer, queryAnalyzer, options, maxSurfaceFormsPerAnalyzedForm, maxGraphExpansions, preservePositionIncrements); if (maxEdits < 0 || maxEdits > LevenshteinAutomata.MAXIMUM_SUPPORTED_DISTANCE) { throw new IllegalArgumentException("maxEdits must be between 0 and " + LevenshteinAutomata.MAXIMUM_SUPPORTED_DISTANCE); } diff --git lucene/suggest/src/test/org/apache/lucene/search/suggest/analyzing/AnalyzingSuggesterTest.java lucene/suggest/src/test/org/apache/lucene/search/suggest/analyzing/AnalyzingSuggesterTest.java index eca1d26..1b86e20 100644 --- lucene/suggest/src/test/org/apache/lucene/search/suggest/analyzing/AnalyzingSuggesterTest.java +++ lucene/suggest/src/test/org/apache/lucene/search/suggest/analyzing/AnalyzingSuggesterTest.java @@ -175,9 +175,8 @@ public class AnalyzingSuggesterTest extends LuceneTestCase { mapping.put(title, Long.valueOf(randomWeight)); } } - - AnalyzingSuggester analyzingSuggester = new AnalyzingSuggester(new MockAnalyzer(random())); - analyzingSuggester.setPreservePositionIncrements(random().nextBoolean()); + AnalyzingSuggester analyzingSuggester = new AnalyzingSuggester(new MockAnalyzer(random()), new MockAnalyzer(random()), + AnalyzingSuggester.EXACT_FIRST | AnalyzingSuggester.PRESERVE_SEP, 256, -1, random().nextBoolean()); boolean doPayloads = random().nextBoolean(); if (doPayloads) { List keysAndPayloads = new ArrayList<>(); @@ -214,8 +213,9 @@ public class AnalyzingSuggesterTest extends LuceneTestCase { }; Analyzer standard = new MockAnalyzer(random(), MockTokenizer.WHITESPACE, true, MockTokenFilter.ENGLISH_STOPSET); - AnalyzingSuggester suggester = new AnalyzingSuggester(standard); - suggester.setPreservePositionIncrements(false); + AnalyzingSuggester suggester = new AnalyzingSuggester(standard, standard, + AnalyzingSuggester.EXACT_FIRST | AnalyzingSuggester.PRESERVE_SEP, 256, -1, false); + suggester.build(new InputArrayIterator(keys)); List results = suggester.lookup(_TestUtil.stringToCharSequence("the ghost of chris", random()), false, 1); diff --git lucene/suggest/src/test/org/apache/lucene/search/suggest/analyzing/FuzzySuggesterTest.java lucene/suggest/src/test/org/apache/lucene/search/suggest/analyzing/FuzzySuggesterTest.java index 3d24856..9b59f28 100644 --- lucene/suggest/src/test/org/apache/lucene/search/suggest/analyzing/FuzzySuggesterTest.java +++ lucene/suggest/src/test/org/apache/lucene/search/suggest/analyzing/FuzzySuggesterTest.java @@ -177,8 +177,8 @@ public class FuzzySuggesterTest extends LuceneTestCase { }; Analyzer standard = new MockAnalyzer(random(), MockTokenizer.WHITESPACE, true, MockTokenFilter.ENGLISH_STOPSET); - FuzzySuggester suggester = new FuzzySuggester(standard); - suggester.setPreservePositionIncrements(false); + FuzzySuggester suggester = new FuzzySuggester(standard, standard, AnalyzingSuggester.EXACT_FIRST | AnalyzingSuggester.PRESERVE_SEP, 256, -1, false, FuzzySuggester.DEFAULT_MAX_EDITS, FuzzySuggester.DEFAULT_TRANSPOSITIONS, + FuzzySuggester.DEFAULT_NON_FUZZY_PREFIX, FuzzySuggester.DEFAULT_MIN_FUZZY_LENGTH, FuzzySuggester.DEFAULT_UNICODE_AWARE); suggester.build(new InputArrayIterator(keys)); List results = suggester.lookup(_TestUtil.stringToCharSequence("the ghost of chris", random()), false, 1);