/// <summary> /// Create a new <see cref="FuzzyQuery"/> that will match terms with an edit distance /// of at most <paramref name="maxEdits"/> to <paramref name="term"/>. /// If a <paramref name="prefixLength"/> > 0 is specified, a common prefix /// of that length is also required. /// </summary> /// <param name="term"> The term to search for </param> /// <param name="maxEdits"> Must be >= 0 and <= <see cref="LevenshteinAutomata.MAXIMUM_SUPPORTED_DISTANCE"/>. </param> /// <param name="prefixLength"> Length of common (non-fuzzy) prefix </param> /// <param name="maxExpansions"> The maximum number of terms to match. If this number is /// greater than <see cref="BooleanQuery.MaxClauseCount"/> when the query is rewritten, /// then the maxClauseCount will be used instead. </param> /// <param name="transpositions"> <c>true</c> if transpositions should be treated as a primitive /// edit operation. If this is <c>false</c>, comparisons will implement the classic /// Levenshtein algorithm. </param> public FuzzyQuery(Term term, int maxEdits, int prefixLength, int maxExpansions, bool transpositions) : base(term.Field) { if (maxEdits < 0 || maxEdits > LevenshteinAutomata.MAXIMUM_SUPPORTED_DISTANCE) { throw new ArgumentOutOfRangeException(nameof(maxEdits), "maxEdits must be between 0 and " + LevenshteinAutomata.MAXIMUM_SUPPORTED_DISTANCE); // LUCENENET specific - changed from IllegalArgumentException to ArgumentOutOfRangeException (.NET convention) } if (prefixLength < 0) { throw new ArgumentOutOfRangeException(nameof(prefixLength), "prefixLength cannot be negative."); // LUCENENET specific - changed from IllegalArgumentException to ArgumentOutOfRangeException (.NET convention) } if (maxExpansions < 0) { throw new ArgumentOutOfRangeException(nameof(maxExpansions), "maxExpansions cannot be negative."); // LUCENENET specific - changed from IllegalArgumentException to ArgumentOutOfRangeException (.NET convention) } this.term = term; this.maxEdits = maxEdits; this.prefixLength = prefixLength; this.transpositions = transpositions; this.maxExpansions = maxExpansions; MultiTermRewriteMethod = new MultiTermQuery.TopTermsScoringBooleanQueryRewrite(maxExpansions); }
/// <summary> /// Create a new <see cref="FuzzyQuery"/> that will match terms with an edit distance /// of at most <paramref name="maxEdits"/> to <paramref name="term"/>. /// If a <paramref name="prefixLength"/> > 0 is specified, a common prefix /// of that length is also required. /// </summary> /// <param name="term"> The term to search for </param> /// <param name="maxEdits"> Must be >= 0 and <= <see cref="LevenshteinAutomata.MAXIMUM_SUPPORTED_DISTANCE"/>. </param> /// <param name="prefixLength"> Length of common (non-fuzzy) prefix </param> /// <param name="maxExpansions"> The maximum number of terms to match. If this number is /// greater than <see cref="BooleanQuery.MaxClauseCount"/> when the query is rewritten, /// then the maxClauseCount will be used instead. </param> /// <param name="transpositions"> <c>true</c> if transpositions should be treated as a primitive /// edit operation. If this is <c>false</c>, comparisons will implement the classic /// Levenshtein algorithm. </param> public FuzzyQuery(Term term, int maxEdits, int prefixLength, int maxExpansions, bool transpositions) : base(term.Field) { if (maxEdits < 0 || maxEdits > LevenshteinAutomata.MAXIMUM_SUPPORTED_DISTANCE) { throw new ArgumentException("maxEdits must be between 0 and " + LevenshteinAutomata.MAXIMUM_SUPPORTED_DISTANCE); } if (prefixLength < 0) { throw new ArgumentException("prefixLength cannot be negative."); } if (maxExpansions < 0) { throw new ArgumentException("maxExpansions cannot be negative."); } this.term = term; this.maxEdits = maxEdits; this.prefixLength = prefixLength; this.transpositions = transpositions; this.maxExpansions = maxExpansions; MultiTermRewriteMethod = new MultiTermQuery.TopTermsScoringBooleanQueryRewrite(maxExpansions); }