Package org.apache.lucene.search.spell

# Class SpellChecker

java.lang.Object
org.apache.lucene.search.spell.SpellChecker

All Implemented Interfaces:
  `Closeable`, `AutoCloseable`

public class SpellChecker extends Object implements Closeable
Spell Checker class (Main class).
(initially inspired by the David Spencer code).

Example Usage:

      SpellChecker spellchecker = new SpellChecker(spellIndexDirectory);
      // To index a field of a user index:
      spellchecker.indexDictionary(new LuceneDictionary(my_lucene_reader, a_field));
      // To index a file containing words:
      spellchecker.indexDictionary(new PlainTextDictionary(new File("myfile.txt")));
      String[] suggestions = spellchecker.suggestSimilar("misspelt", 5);

- ## Field Summary

  Fields
  Modifier and Type
  Field
  Description
  `static final float`
  `DEFAULT_ACCURACY`
  The default minimum score to use, if not specified by calling `setAccuracy(float)` .
  `static final String`
  `F_WORD`
  Field name for each word in the ngram index.

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `SpellChecker(Directory spellIndex)`
  Use the given directory as a spell checker index with a `LevenshteinDistance` as the default `StringDistance`.
  `SpellChecker(Directory spellIndex, StringDistance sd)`
  Use the given directory as a spell checker index.
  `SpellChecker(Directory spellIndex, StringDistance sd, Comparator<SuggestWord> comparator)`
  Use the given directory as a spell checker index with the given `StringDistance` measure and the given `Comparator` for sorting the results.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `void`
  `clearIndex()`
  Removes all terms from the spell check index.
  `void`
  `close()`
  Close the IndexSearcher used by this SpellChecker
  `boolean`
  `exist(String word)`
  Check whether the word exists in the index.
  `float`
  `getAccuracy()`
  The accuracy (minimum score) to be used, unless overridden in `suggestSimilar(String, int, IndexReader, String, SuggestMode, float)`, to decide whether a suggestion is included or not.
  `Comparator<SuggestWord>`
  `getComparator()`
  Gets the comparator in use for ranking suggestions.
  `StringDistance`
  `getStringDistance()`
  Returns the `StringDistance` instance used by this `SpellChecker` instance.
  `final void`
  `indexDictionary(Dictionary dict, IndexWriterConfig config, boolean fullMerge)`
  Indexes the data from the given `Dictionary`.
  `void`
  `setAccuracy(float acc)`
  Sets the accuracy 0 < minScore < 1; default `DEFAULT_ACCURACY`
  `void`
  `setComparator(Comparator<SuggestWord> comparator)`
  Sets the `Comparator` for the `SuggestWordQueue`.
  `void`
  `setSpellIndex(Directory spellIndexDir)`
  Use a different index as the spell checker index or re-open the existing index if `spellIndex` is the same value as given in the constructor.
  `void`
  `setStringDistance(StringDistance sd)`
  Sets the `StringDistance` implementation for this `SpellChecker` instance.
  `String[]`
  `suggestSimilar(String word, int numSug)`
  Suggest similar words.
  `String[]`
  `suggestSimilar(String word, int numSug, float accuracy)`
  Suggest similar words.
  `String[]`
  `suggestSimilar(String word, int numSug, IndexReader ir, String field, SuggestMode suggestMode)`
  Calls `suggestSimilar(word, numSug, ir, suggestMode, field, this.accuracy)`
  `String[]`
  `suggestSimilar(String word, int numSug, IndexReader ir, String field, SuggestMode suggestMode, float accuracy)`
  Suggest similar words (optionally restricted to a field of an index).

  ### Methods inherited from class java.lang.Object

  `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- ## Field Details

  - ### DEFAULT_ACCURACY

    public static final float DEFAULT_ACCURACY
    The default minimum score to use, if not specified by calling `setAccuracy(float)` .
    See Also:
      - Constant Field Values

  - ### F_WORD

    public static final String F_WORD
    Field name for each word in the ngram index.
    See Also:
      - Constant Field Values

- ## Constructor Details

  - ### SpellChecker

    public SpellChecker(Directory spellIndex, StringDistance sd) throws IOException
    Use the given directory as a spell checker index. The directory is created if it doesn't exist yet.
    Parameters:
      `spellIndex` - the spell index directory
      `sd` - the `StringDistance` measurement to use
    Throws:
      `IOException` - if Spellchecker can not open the directory

  - ### SpellChecker

    public SpellChecker(Directory spellIndex) throws IOException
    Use the given directory as a spell checker index with a `LevenshteinDistance` as the default `StringDistance`. The directory is created if it doesn't exist yet.
    Parameters:
      `spellIndex` - the spell index directory
    Throws:
      `IOException` - if spellchecker can not open the directory

  - ### SpellChecker

    public SpellChecker(Directory spellIndex, StringDistance sd, Comparator<SuggestWord> comparator) throws IOException
    Use the given directory as a spell checker index with the given `StringDistance` measure and the given `Comparator` for sorting the results.
    Parameters:
      `spellIndex` - The spelling index
      `sd` - The distance
      `comparator` - The comparator
    Throws:
      `IOException` - if there is a problem opening the index

- ## Method Details

  - ### setSpellIndex

    public void setSpellIndex(Directory spellIndexDir) throws IOException
    Use a different index as the spell checker index or re-open the existing index if `spellIndex` is the same value as given in the constructor.
    Parameters:
      `spellIndexDir` - the spell directory to use
    Throws:
      `AlreadyClosedException` - if the Spellchecker is already closed
      `IOException` - if spellchecker can not open the directory

  - ### setComparator

    public void setComparator(Comparator<SuggestWord> comparator)
    Sets the `Comparator` for the `SuggestWordQueue`.
    Parameters:
      `comparator` - the comparator

  - ### getComparator

    public Comparator<SuggestWord> getComparator()
    Gets the comparator in use for ranking suggestions.
    See Also:
      - `setComparator(Comparator)`

  - ### setStringDistance

    public void setStringDistance(StringDistance sd)
    Sets the `StringDistance` implementation for this `SpellChecker` instance.
    Parameters:
      `sd` - the `StringDistance` implementation for this `SpellChecker` instance

  - ### getStringDistance

    public StringDistance getStringDistance()
    Returns the `StringDistance` instance used by this `SpellChecker` instance.
    Returns:
      the `StringDistance` instance used by this `SpellChecker` instance.

  - ### setAccuracy

    public void setAccuracy(float acc)
    Sets the accuracy 0 < minScore < 1; default `DEFAULT_ACCURACY`
    Parameters:
      `acc` - The new accuracy

  - ### getAccuracy

    public float getAccuracy()
    The accuracy (minimum score) to be used, unless overridden in `suggestSimilar(String, int, IndexReader, String, SuggestMode, float)`, to decide whether a suggestion is included or not.
    Returns:
      The current accuracy setting

  - ### suggestSimilar

    public String[] suggestSimilar(String word, int numSug) throws IOException
    Suggest similar words.

    As the Lucene similarity that is used to fetch the most relevant n-grammed terms is not the same as the edit distance strategy used to calculate the best matching spell-checked word from the hits that Lucene found, one usually has to retrieve a couple of numSug's in order to get the true best match.

    I.e. if numSug == 1, don't count on that suggestion being the best one. Thus, you should set this value to at least 5 for a good suggestion.

    Parameters:
      `word` - the word you want a spell check done on
      `numSug` - the number of suggested words
    Returns:
      String[]
    Throws:
      `IOException` - if the underlying index throws an `IOException`
      `AlreadyClosedException` - if the Spellchecker is already closed
    See Also:
      - `suggestSimilar(String, int, IndexReader, String, SuggestMode, float)`

  - ### suggestSimilar

    public String[] suggestSimilar(String word, int numSug, float accuracy) throws IOException
    Suggest similar words.

    As the Lucene similarity that is used to fetch the most relevant n-grammed terms is not the same as the edit distance strategy used to calculate the best matching spell-checked word from the hits that Lucene found, one usually has to retrieve a couple of numSug's in order to get the true best match.

    I.e. if numSug == 1, don't count on that suggestion being the best one. Thus, you should set this value to at least 5 for a good suggestion.

    Parameters:
      `word` - the word you want a spell check done on
      `numSug` - the number of suggested words
      `accuracy` - The minimum score a suggestion must have in order to qualify for inclusion in the results
    Returns:
      String[]
    Throws:
      `IOException` - if the underlying index throws an `IOException`
      `AlreadyClosedException` - if the Spellchecker is already closed
    See Also:
      - `suggestSimilar(String, int, IndexReader, String, SuggestMode, float)`

  - ### suggestSimilar

    public String[] suggestSimilar(String word, int numSug, IndexReader ir, String field, SuggestMode suggestMode) throws IOException
    Calls `suggestSimilar(word, numSug, ir, suggestMode, field, this.accuracy)`
    Throws:
      `IOException`

  - ### suggestSimilar

    public String[] suggestSimilar(String word, int numSug, IndexReader ir, String field, SuggestMode suggestMode, float accuracy) throws IOException
    Suggest similar words (optionally restricted to a field of an index).

    As the Lucene similarity that is used to fetch the most relevant n-grammed terms is not the same as the edit distance strategy used to calculate the best matching spell-checked word from the hits that Lucene found, one usually has to retrieve a couple of numSug's in order to get the true best match.

    I.e. if numSug == 1, don't count on that suggestion being the best one. Thus, you should set this value to at least 5 for a good suggestion.

    Parameters:
      `word` - the word you want a spell check done on
      `numSug` - the number of suggested words
      `ir` - the indexReader of the user index (can be null see field param)
      `field` - the field of the user index: if field is not null, the suggested words are restricted to the words present in this field.
      `suggestMode` - (NOTE: if indexReader==null and/or field==null, then this is overridden with SuggestMode.SUGGEST_ALWAYS)
      `accuracy` - The minimum score a suggestion must have in order to qualify for inclusion in the results
    Returns:
      String[] the sorted list of the suggest words with these 2 criteria: first criteria: the edit distance, second criteria (only if restricted mode): the popularity of the suggest words in the field of the user index
    Throws:
      `IOException` - if the underlying index throws an `IOException`
      `AlreadyClosedException` - if the Spellchecker is already closed

  - ### clearIndex

    public void clearIndex() throws IOException
    Removes all terms from the spell check index.
    Throws:
      `IOException` - If there is a low-level I/O error.
      `AlreadyClosedException` - if the Spellchecker is already closed

  - ### exist

    public boolean exist(String word) throws IOException
    Check whether the word exists in the index.
    Parameters:
      `word` - word to check
    Returns:
      true if the word exists in the index
    Throws:
      `IOException` - If there is a low-level I/O error.
      `AlreadyClosedException` - if the Spellchecker is already closed

  - ### indexDictionary

    public final void indexDictionary(Dictionary dict, IndexWriterConfig config, boolean fullMerge) throws IOException
    Indexes the data from the given `Dictionary`.
    Parameters:
      `dict` - Dictionary to index
      `config` - `IndexWriterConfig` to use
      `fullMerge` - whether or not the spellcheck index should be fully merged
    Throws:
      `AlreadyClosedException` - if the Spellchecker is already closed
      `IOException` - If there is a low-level I/O error.

  - ### close

    public void close() throws IOException
    Close the IndexSearcher used by this SpellChecker
    Specified by:
      `close` in interface `AutoCloseable`
    Specified by:
      `close` in interface `Closeable`
    Throws:
      `IOException` - if the close operation causes an `IOException`
      `AlreadyClosedException` - if the `SpellChecker` is already closed