2013-04-22 59 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;