ドイツ語アナライザーを使用して、一部のコンテンツをトークン化しています。基本的に、「lowercase」、「german_stop」、「german_keywords」、「german_normalization」、「german_stemmer」のマクロ フィルターであることはわかっています。
私の問題は、正規化フィルターに関係しています。Elasticsearch のドキュメントとフィルターのLucene 実装は次のとおりです。問題は、ae ue と oe がドイツ語の文字 ä、ö、ü として扱われるため、a、o、u に変換されることです。
2 番目の変換は優れていますが、最初の変換は解決するよりも多くの問題を引き起こします。通常、ドイツ語のテキストには ä、ü、ö を実際に表す ae、ue、oe はありません。それらが実際に現れるほとんどの時間は、「エアロダイナミク」(空気力学)のようなラテン語または英語に由来する外国語の中にあります。次に、フィルターは「Ae」を「Ä」として解釈し、「A」に変換します。これにより、「arodynamik」がトークンとして生成されます。通常、検索語もそのフィルタで正規化されるため、これは問題になりません。ただし、ワイルドカード検索と組み合わせると、これが問題になります。
「FooEdit」のような単語を想像してみてください。これは「foodit」にトークン化されます。'edit OR *edit*' の検索 (ユーザーが 'edit' を検索するときの私の通常の検索) では、'edit' の 'e' が失われたため、結果が得られません。私のコンテンツにはそのような単語がたくさんあり、人々は部分的な単語を検索しているので、見かけほど特殊なケースではありません.
だから私の質問は、「ae -> a」変換を取り除く方法はありますか? 私の理解では、これはGerman2 スノーボール アルゴリズムの一部であるため、おそらくこれを変更することはできません。つまり、正規化ステップ全体を取り除かなければならないということですか、それとも、気に入らない部分を取り除くだけの独自のバージョンのスノーボール アルゴリズムを提供できますか (カスタムの使用方法に関するドキュメントは見つかりませんでした)。正規化のためのスノーボールアルゴリズム)?
乾杯
トム