A SynonymFilter允許您將SynonymnMap定義爲簡單的自定義分析器。
只需重寫Analyzer.createComponents即可創建自定義分析器,並分別在寫入和搜索時將定製版本傳遞給IndexWriter和QueryParser。
有一件事要考慮,你的情況涉及爆炸所有可能的同義詞,這將意味着在Builder.add通過includeOrig爲真。這兩種方式都有好處,可能會考慮哪種方法最能滿足您的需求。
Lucene的Analyzer
被設計成易於擴展到輕鬆地定義的格式爲你的具體情況。上面鏈接的Analyzer
API文檔提供了一個覆蓋自定義分析器的createComponents方法的示例。
喜歡的東西:
protected TokenStreamComponents createComponents(String fieldName, Reader reader) {
Tokenizer source = new ClassicTokenizer(Version.LUCENE_40, reader);
TokenStream filter = new StandardFilter(Version.LUCENE_40, source);
filter = new LowerCaseFilter(Version.LUCENE_40,filter);
filter = new SynonymFilter(filter, mySynonymMap, false);
//Whatever other filter you want to add to the chain, being mindful of order.
return new TokenStreamComponents(source, filter);
}
你還需要定義mySynonymMap,從例子,這是一個SynonymnMap
。 SynonymMap
通常應該由SynonymMap.Builder
通過上面鏈接的add(CharsRef, CharsRef, boolean)
方法構建。
SynonymMap.Builder builder = new SynonymMap.Builder(true);
builder.add(new CharsRef("crimson"), new CharsRef("red"), true);
//Be sure the boolean last arg you pass there is the one you want. There are significant tradeoffs here.
//Add as many terms as you like here...
SynonymMap mySynonymMap = builder.build();
還有一個WordNetSynonymParser
,如果你喜歡的,它看起來像只是設計用來讀取規格的特定不大不小的SynonymMap.Builder,一目瞭然。
是源於索引的術語? – phani 2013-03-28 15:56:47
是的,索引中的術語使用lucene 4.2的SnowBallFilter版本 – 2013-03-29 06:12:04