0

最近、バージョン 3.1 以降、Lucene StandardAnalyzer の動作が多少変更されていることに気付きました。具体的には、3.0 以前のバージョンでは電子メール、IP アドレス、会社名などを個別の字句タイプとして認識していましたが、それ以降のバージョンでは認識しませんでした。

たとえば、入力テキスト「example@mail.com 127.0.0.1 H&M」の場合、3.0 アナライザーは次のタイプを認識します。

1: example@mail.com: 0->16: <メールアドレス>

2: 127.0.0.1: 17->26: <ホスト>

3: h&m: 27->30: <会社名>

ただし、バージョン 3.1 以降では、同じ入力テキストに対して次の出力が得られます。

1: 例: 0->7: < ALPHANUM >

2: mail.com: 8->16: < ALPHANUM >

3: 127.0.0.1: 17->26: <数値>

私の質問は、新しいバージョンの Lucene ライブラリで古い StandardAnalyzer の動作を実装するにはどうすればよいですか? これを実現するのに役立つ標準の TokenFilters はありますか、それともカスタム フィルターを実装する必要がありますか?

4

1 に答える 1

1

StandardAnalyzer の javadoc を参照してください: 3.1 の時点で、StandardTokenizer は Unicode テキスト セグメンテーションを実装しています.... ClassicTokenizer と ClassicAnalyzer は、StandardTokenizer と StandardAnalyzer の 3.1 より前の実装です。

または、LUCENE_30 バージョンを StandardAnalyzer に渡すと、以前の動作が得られます。これらのバージョン定数の目的は、既存のユーザーに対して動作の一貫性を保ち、変更された動作にアプリをアップグレードする時期を決定できるようにすることです。

于 2011-12-27T19:57:31.850 に答える