lucene-java-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Björn Ekengren <bjorn.ekeng...@avanza.se>
Subject Strange Spellchecker behaviour
Date Tue, 10 Oct 2006 09:12:23 GMT
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;
    }
}


Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message