Hello, I have found that the spellchecker behaves a bit strange. My spell 
indexer class below doesn't work if I use the spellfield string set in the 
constructor directly, but it does work if I use the intern() value. The problem 
resides in the hasNext() method of LuceneIterator where an object comparison 
between two field strings occur. Now I got everything to work here, but I do 
wonder why it didn't work in my first version.
 
public boolean hasNext() {
      has_next_called = true;
      try {
        // if there is still words
        if (!termEnum.next()) {
          actualTerm = null;
          return false;
       }
       //  if the next word are in the field
      actualTerm = termEnum.term();
      String fieldt = actualTerm.field();
      if (fieldt != field) {
         actualTerm = null;
         return false;
      }
      return true;
    } catch (IOException ex) {
      ex.printStackTrace();
      return false;
    }
}

 
 
 
 
public class SpellIndexer {
 
 private Directory indexMainDirectory;
 private Directory indexSpellDirectory;
 private String spellField;
 
 public SpellIndexer(String spellField,
      String indexMainDirectoryStr,
      String indexSpellDirectoryStr) throws IOException{
  this.spellField = spellField;
  this.indexMainDirectory = 
FSDirectory.getDirectory(indexMainDirectoryStr,false);
  this.indexSpellDirectory = 
FSDirectory.getDirectory(indexSpellDirectoryStr,true);
 }
 
 
 public boolean rebuildSpellIndex(File indexDir) throws IOException {
        Directory indexSpellDir = indexDir == null ? indexSpellDirectory : 
FSDirectory.getDirectory(indexDir,true);
        IndexReader indexReader = null;
        boolean success = false;
        try {
            indexReader = IndexReader.open(indexMainDirectory);
            Dictionary dictionary = new LuceneDictionary(indexReader, 
spellField.intern());  // <---------------- Doesn't work with spellField 
directly
            SpellChecker spellChecker = new SpellChecker(indexSpellDir);
            spellChecker.indexDictionary(dictionary);
            success = true;
        } finally {
            if (indexReader != null) {
                indexReader.close();
            }
        }
        return success;
    }
}

Reply via email to