SynonymFilterを使用すると、 SynonymnMapを単純なカスタム アナライザー に定義できます。
Analyzer.createComponentsをオーバーライドするだけでカスタム Analyzer を作成し、カスタム バージョンを IndexWriter と QueryParser の両方に渡すことができます。
考慮すべきことの1つは、考えられるすべての同義語を分解することです。これは、 includeOrigを Builder.add に true に渡すことを意味します。ここにはどちらの方法でも利点があります。実際にどちらがニーズに最も適しているかを調べることができます.
Lucene'sAnalyzer
は、特定のケースのフォーマットを簡単に定義できるように、簡単に拡張できるように設計されています。上記の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 のように見える もあります。