3

Lucene 4.2.1 には StandardAnalyzer がありません。ソース テキストを変更しない基本的なアナライザーを実装する方法がわかりません。ポインタはありますか?

final SimpleFSDirectory DIRECTORY = new SimpleFSDirectory(new File(ELEMENTS_INDEX_DIR));
IndexWriterConfig indexWriterConfig = new IndexWriterConfig(Version.LUCENE_42, new Analyzer() {
        @Override
        protected TokenStreamComponents createComponents(String s, Reader reader) {
            return null;
        }
    });
    IndexWriter indexWriter = new IndexWriter(DIRECTORY, indexWriterConfig);
    List<ModelObject> elements = dao.getAll();
    for (ModelObject element : elements) {
        Document document = new Document();
        document.add(new StringField("id", String.valueOf(element.getId()), Field.Store.YES));
        document.add(new TextField("name", element.getName(), Field.Store.YES));
        indexWriter.addDocument(document);
    }
    indexWriter.close();
4

2 に答える 2

9

createComponents から TokenStreamComponents を返す必要があります。 null十分ではありません。

ただし、Lucene 4.2.1 には確かにStandardAnalyzerあります。

おそらく、Lucene 4.x の StandardAnalyzer の変更点を参照していて、古い StandardAnalyzer を探している場合は、ClassicAnalyzerが必要になります。

何も変更せず、非常に単純な方法でトークン化するだけの簡素化されたアナライザーが本当に必要な場合は、おそらくWhitespaceAnalyzerが目的を果たします。

まったく変更またはトークン化したくない場合は、KeywordAnalyzer .

そして、あなたが言うように、独自のアナライザーを作成する必要がある場合は、メソッドをオーバーライドし、createComponents実際に のインスタンスを構築して返しますTokenStreamComponents。上記の 4 つのいずれもニーズを満たしていない場合、ニーズが何であるかはわかりません。そのため、ここで具体的な例を試みることはしませんが、Analyzer ドキュメントの例を次に示します。

Analyzer analyzer = new Analyzer() {
 @Override
  protected TokenStreamComponents createComponents(String fieldName, Reader reader) {
    Tokenizer source = new FooTokenizer(reader);
    TokenStream filter = new FooFilter(source);
    filter = new BarFilter(filter);
    return new TokenStreamComponents(source, filter);
  }
};

TokenStreamComponents にも単一の arg ctor があるため、フィルタはオプションです。

于 2013-04-22T22:40:46.210 に答える
2

Common Analyzers をプロジェクトに追加する必要があります。これらは、Lucene-4.2.1.zip ファイルの「analysis/common」の下にある別の JAR ファイルで利用できるようになりました。

 lucene-analyzers-common-4.*.jar

プロジェクトに追加すると(コアを追加したときに)、これが機能するはずです:

import org.apache.lucene.analysis.standard.StandardAnalyzer;
于 2013-05-02T08:38:53.833 に答える