2017-06-12 10 views
2

Lucene 6.5.1を使用しておすすめAPIを構築しています。Luceneに単語を追加する方法PlainTextDictionary

最初にベースライン辞書を作成しました。 org.apache.lucene.search.spell.Dictionaryテキストファイルには、org.apache.lucene.search.spell.PlainTextDictionaryを使用していますが、辞書の単語リストはそこで停止してはいけません。

このベースライン辞書に新しい単語を追加/追加するには、エンドポイントが必要です。最初のテキストファイルで単語が欠落していて、それを追加したいと思う人がいる場合は、List<String>を入力してサービスエンドポイントを使用してそれを行うことができます。既存の辞書に単語を追加するその他の理由が無数にあるかもしれません。

私はSpellCheckerクラスを使用してそれを達成するための単純な方法を見つけることができません。

お勧めします。

ここではSOLRの使用はオプションではありません。

答えて

0

構造がわかっていればDocumentです。 SpellCheckerクラス(getMingetMaxcreateDocument & addGram)の4つのプライベートメソッドを単純にコピーし、以下のように書きました。

100%正確ですが、追加する単語や追加された単語が一致した場合にはわかりません。

@Override 
    public Boolean addWords(Set<String> words) throws IOException{ 

     synchronized(modifyCurrentIndexLock){ 

     IndexWriterConfig wConfig = new IndexWriterConfig(new SimpleAnalyzer()); 
     wConfig.setOpenMode(OpenMode.CREATE_OR_APPEND); 

     try(Directory spellIndex = FSDirectory.open(new File(indexLocation).toPath()); 
      SpellChecker spellchecker = new SpellChecker(spellIndex); 
      IndexWriter writer = new IndexWriter(spellIndex, wConfig);) 
     { 
      for(String word:words){ 
       if(!spellchecker.exist(word)){ 

        logger.debug("Word -> "+word +" doesn't exist in dictionary to trying to add to index"); 
        Document doc = createDocument(word, getMin(word.length()), getMax(word.length())); 
        writer.addDocument(doc); 
        writer.commit(); 
       } 
      } 
      logger.debug("All valid words added to dictionary"); 
      return true; 
     } 

     } 

    } 

indexLocation

& modifyCurrentIndexLockは、クラス・インスタンス・フィールドです。

関連する問題