タイヤgemを使用したelasticsearchのアナライザーの概念を理解するのに苦労しています。私は実際にこれらの検索概念の初心者です。ここの誰かが参考資料で私を助けたり、実際にアナライザーが何をするのか、そしてなぜそれらが使用されるのかを説明できますか?
キーワード、標準、シンプル、スノーボールなど、さまざまなアナライザーがelasticsearchで言及されています。アナライザーの知識がなければ、実際に自分のニーズに合ったものを見つけることができませんでした。
簡単に答えさせてください。
アナライザーは、インデックス時間および検索時間に使用されます。用語のインデックスを作成するために使用されます。
フレーズにインデックスを付けるには、単語に分割すると便利です。アナライザーが来ます。
トークナイザーとトークンフィルターを適用します。トークナイザーは、ホワイトスペーストークナイザーです。各スペースでトークンのフレーズを分割します。小文字のトークナイザーは、非文字ごとにフレーズを分割し、すべての文字を小文字にします。
トークンフィルターは、一部のトークンをフィルター処理または変換するために使用されます。たとえば、ASCII折りたたみフィルターは、ê、é、èなどの文字をeに変換します。
アナライザーは、これらすべての組み合わせです。
分析ガイド を読み、あなたが持っているすべての異なるオプションを見てください。
デフォルトでは、Elasticsearchは標準アナライザーを適用します。すべての一般的な英語の単語(および他の多くのフィルター)を削除します
Analyze Api を使用して、その仕組みを理解することもできます。非常に便利。
Lucene
では、アナライザーはトークナイザー(スプリッター)+ステマー+ストップワードフィルターの組み合わせです
ElasticSearch
では、アナライザーは以下の組み合わせです
Character filter
:トークン化される前に文字列を「整理」します。例:HTMLタグを削除するTokenizer
:単一のトークナイザーが必要です。文字列を個々の用語またはトークンに分割するために使用されますToken filter
:トークンを変更、追加、または削除します。 Stemmerはトークンフィルターの例です。たとえば、「happy」、「happiness」=>「happi」など、Wordのベースを取得するために使用されます。Snowball demo here を参照してください
これは私のシステムの設定です:
{
"settings":{
"index" : {
"analysis" : {
"analyzer" : {
"analyzerWithSnowball" : {
"tokenizer" : "standard",
"filter" : ["standard", "lowercase", "englishSnowball"]
}
},
"filter" : {
"englishSnowball" : {
"type" : "Snowball",
"language" : "english"
}
}
}
}
}
}
Ref:
github repo にある素晴らしいプラグインです。 Analyze API の拡張です。公式の弾性プラグイン list で見つけました。
すばらしいのは、すべてのステップの後にすべての属性を持つトークンを表示することです。これにより、アナライザーの構成をデバッグし、そのようなトークンを取得した理由と、必要なトークンを失った場所を簡単に確認できます。
今日よりも早く見つけてほしい。そのおかげで、なぜkeyword_repeat
トークントークナイザーが正しく機能していないようです。この問題は、次のトークンフィルターが原因で発生しました:icu_transform
(音訳に使用)これは、残念ながらキーワード属性を尊重せず、すべてのトークンを変換しました。このプラグインでない場合、他にどのように原因を見つけることができるかわかりません。