Apache Luceneで独自のアナライザを実装しました。用語が索引付けされる前に適用するフィルタがあります。私はフィルタの適用順序を変更することは問題ではないと思った。しかしそれはそうであるように思われる。例えば;Apache Luceneで "フィルタを適用する順序"の背後にあるロジック
analyzer = new Analyzer(){
@Override
protected TokenStreamComponents createComponents(String fieldName){
AttributeFactory factory = AttributeFactory.DEFAULT_ATTRIBUTE_FACTORY;
Tokenizer source = new NGramTokenizer(factory,3,10);
TokenStream filter = new NewlineFilter(source);
filter = new LowerCaseFilter(filter);
filter = new UsefulGrams(getVersion(), filter, usefulGramSet);
filter = new EmptySpaceFilter(filter);
return new TokenStreamComponents(source,filter);
};
};
私のトークナイザはグラムを生成しています。その後、改行がカットされ、すべてのケースが下がります。この後、私は、有用であることがわかっているグラムだけを索引に入れて、そのフィルターが無駄なグラムを排除するようにします。最後に、空のスペースで完全に構成されるグラムをフィルタリングします。
私が保持しているデータセットでは、この順序で316の索引語が生成されます。しかし、私はフィルターの順序を変更する場合。
analyzer = new Analyzer(){
@Override
protected TokenStreamComponents createComponents(String fieldName){
AttributeFactory factory = AttributeFactory.DEFAULT_ATTRIBUTE_FACTORY;
Tokenizer source = new NGramTokenizer(factory,3,10);
TokenStream filter = new UsefulGrams(getVersion(), source, usefulGramSet);
filter = new NewlineFilter(filter);
filter = new EmptySpaceFilter(filter);
filter = new LowerCaseFilter(filter);
return new TokenStreamComponents(source,filter);
};
};
これは、350のインデックス付き用語を生成します。 「最初の」フィルタはSOURCE TOKENIZERを使用する必要がありますが、他のフィルタはFILTER TOKENSTREAMを使用することに注意してください。 すべてのパラメータにSOURCEを入れると、「addsuppression」に関する警告が表示されます。
私の質問は、これらのフィルタを適用する順序はどうでしょうか?私はこれらをすべて適用したい(すべて小文字で、私が選んだ言葉だけで、空白のグラムなしで、改行なし)、これは何かによって変更されるとは思わないだろう、明らかにそうである。
インデックスされた用語の番号が変更されることがありますが、問題は他のものから発生しているようです。 – Karavana