2013-07-01 68 views
2

我正在編制帶有無空格文本的大文本文件索引。目前我有ngram方法來生成長度爲12的字符串,然後我索引它們。同樣的方法來搜索,我從用戶生成的字符串中得到12個字符,然後用它來構建查詢。在搜索時,閱讀有關lucene中的ngram tokenizer。但是找不到任何例子。如何在lucene 4.0中使用ngram tokenizer?

如何在lucene 4.0中實現ngram tokenizer?

回答

7

也許使用NGramTokenizer的最簡單的方法是用this constructor只需要一個讀數器,以及最小和最大克尺寸。您可以將它合併到分析器中,類似於Analyzer docs上的示例。例如:

Analyzer analyzer = new Analyzer() { 
@Override 
    protected TokenStreamComponents createComponents(String fieldName, Reader reader) { 
    Tokenizer source = new NGramTokenizer(reader, 12, 12); 
    TokenStream filter = new LowercaseFilter(source); 
    return new TokenStreamComponents(source, filter); 
    } 
}; 
+0

感謝您的回覆。 – Balaram26

+0

嗨,在這種方法中,如何讓tokenstream打印生成的ngram標記? – Balaram26

+0

你可以打印[reflectAsString](http://lucene.apache.org/core/4_0_0/core/org/apache/lucene/util/AttributeSource.html#reflectAsString(boolean))的輸出,它應該提供良好的調試信息在流中的當前令牌上。 – femtoRgon