1

私は Lucene.Net 2.9.2 を使用しています。カスタム トークナイザーを作成する必要があると思いますが、明らかな何かが欠けている場合に備えて確認したいと考えています。

ドキュメントは、タイトル、キーワード、コンテンツに加えて、作成者、日付などのメタデータで構成され、それぞれがフィールドとして保存されます。ドキュメントはソフトウェア技術ドキュメントであり、タイトル、キーワード、および/またはコンテンツに「.Net」、「C++」、「C#」などの語句が含まれる場合があります。

キーワード フィールドには KeywordAnalyzer を使用し、タイトルとコンテンツには StandardAnalyzer を使用しています。ドキュメントが非常に長くなる可能性があるため、StopWords と LowerCase などが必要です。

たとえば、「C#」を検索するだけでなく、「CSharp」、「C#.Net」なども認識したいので、検索用のシノニム カスタム フィルターも作成しました。トークナイザーは、「C#」から「#」を既に削除しています。または C++ の '++' であるため、たとえば 'C' 言語リファレンスと混同される可能性があります。

私の考えでは、現在のトークンがキーワード フレーズの一部であるか、その類義語の一部であるかに応じて、トークン化を分岐する必要があるタイトルとコンテンツをインデックス化する必要があります。

それが最善のアプローチですか?事前に多くの感謝:)

4

2 に答える 2

2

トークナイザーのカスタマイズは、以下のいずれかのクラスで行うことができます。

1)。Lucene.Net.Analysis.CharTokenizer 2)。Lucene.Net.Analysis.Tokenizer

public class AlphaNumbericTokenizer : Lucene.Net.Analysis.CharTokenizer
{
     public AlphaNumbericTokenizer (System.IO.TextReader input) : base(input)
     {
     }
     protected override bool IsTokenChar(char c)
     {
       //TODO: Logic for identifying token or token separator
       return char.IsLetterOrDigit(c);
     }
}

http://karticles.com/NoSql/lucene_custom_tokenizer.htmlを参照してください。

于 2012-01-24T18:11:55.840 に答える
1

を使用WhitespaceTokenizerし、プラグインしてKeywordMarkerFilterいくつかのトークンを「不可侵」としてマークし、最後に句読点文字を削除する独自のフィルターを提供できると思います。Lucene.Net の知識を持っている人が何か提案してくれるかもしれません。たとえば、SolrWordDelimiterFilterで使用できます。

于 2011-11-14T20:43:26.147 に答える