如何在Lucene 4.2.1中实现基本分析器?

Isa*_*aac 3 java apache lucene search

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();
Run Code Online (Sandbox Code Playgroud)

fem*_*gon 9

您必须从createComponents返回TokenStreamComponents. null是不够的.

然而,Lucene的4.2.1肯定不会StandardAnalyzer.

如果你是,或许,参考Lucene 4.x中StandardAnalyzer的变化,并且正在寻找旧的StandardAnalyzer,那么你将需要ClassicAnalyzer.

如果你真的想要一个不会修改任何东西的修剪分析器,但只是以非常简单的方式标记,也许WhitespaceAnalyzer将满足你的目的.

如果你根本不想修改或标记它,那么KeywordAnalyzer.

如果你必须像你说的那样创建你自己的分析器,那么覆盖该方法createComponents,并实际构建并返回一个实例TokenStreamComponents.如果上述四个都不能满足您的需求,我不知道您的需求是什么,所以我不会在这里尝试一个具体的例子,但这里是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);
  }
};
Run Code Online (Sandbox Code Playgroud)

对于TokenStreamComponents也有一个arg ctor,顺便说一句,过滤器是可选的.