2013-04-22 64 views
3

Lucene 4.2.1没有StandardAnalyzer,我不确定如何实现不改变源文本的基本分析器。任何指针?如何在Lucene 4.2.1中实现基本的分析器?

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(); 
+0

我也真糊涂..所有我需要的是标准的分析。即使在4.2.1源代码中的演示使用StandardAnalyzer,但不会编译(因为它正在org.apache.lucene.analysis.standard.StandardAnalyzer中查找它不存在了) – Dorian 2013-05-02 08:21:32

回答

8

您必须从createComponents返回一个TokenStreamComponents。 null是不够的。

但是,Lucene 4.2.1肯定是确实StandardAnalyzer

如果你是,也许是指在Lucene 4.x StandardAnalyzer的变化,并且正在寻找旧的StandardAnalyzer,那么你会想要ClassicAnalyzer

如果您真的想要一个不会修改任何内容但只是以非常简单的方式进行标记的修剪下来的分析仪,那么WhitespaceAnalyzer就可以满足您的需求。

如果你不希望它修改或标记化,那么KeywordAnalyzer

如果您必须创建您自己的分析器,如您所说,然后覆盖方法createComponents,并且实际构建并返回TokenStreamComponents的实例。如果上述四种满足您的需求,我不知道你的需求是什么,所以我不会尝试一个具体的例子在这里,但这里是从Analyzer docs

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也是一个单独的参数,所以过滤器是可选的。

+0

这并没有解决问题,StandardAnalyzer也没有解决问题,似乎是可用的。我如何实例化它?你能发布一个使用分析器的示例代码文件,并且可以与Lucene 4.2.1一起使用吗? – Dorian 2013-05-02 08:22:01

+0

“如果上述四项都不符合您的需求,我不知道您的需求是什么”+1! – Gevorg 2014-02-12 00:34:29

2

您应该将Common Analyzers添加到您的项目中。 现在,它们可以在Lucene-4.2.1.zip文件的“analysis/common”下的独立JAR文件中获得。

lucene-analyzers-common-4.*.jar 

一旦你把它添加到您的项目(如你添加的核心),你应该有这方面的工作:

import org.apache.lucene.analysis.standard.StandardAnalyzer;