web-dev-qa-db-ja.com

elasticsearchのアナライザー

タイヤgemを使用したelasticsearchのアナライザーの概念を理解するのに苦労しています。私は実際にこれらの検索概念の初心者です。ここの誰かが参考資料で私を助けたり、実際にアナライザーが何をするのか、そしてなぜそれらが使用されるのかを説明できますか?

キーワード、標準、シンプル、スノーボールなど、さまざまなアナライザーがelasticsearchで言及されています。アナライザーの知識がなければ、実際に自分のニーズに合ったものを見つけることができませんでした。

42
Vamsi Krishna

簡単に答えさせてください。

アナライザーは、インデックス時間および検索時間に使用されます。用語のインデックスを作成するために使用されます。

フレーズにインデックスを付けるには、単語に分割すると便利です。アナライザーが来ます。

トークナイザーとトークンフィルターを適用します。トークナイザーは、ホワイトスペーストークナイザーです。各スペースでトークンのフレーズを分割します。小文字のトークナイザーは、非文字ごとにフレーズを分割し、すべての文字を小文字にします。

トークンフィルターは、一部のトークンをフィルター処理または変換するために使用されます。たとえば、ASCII折りたたみフィルターは、ê、é、èなどの文字をeに変換します。

アナライザーは、これらすべての組み合わせです。

分析ガイド を読み、あなたが持っているすべての異なるオプションを見てください。

デフォルトでは、Elasticsearchは標準アナライザーを適用します。すべての一般的な英語の単語(および他の多くのフィルター)を削除します

Analyze Api を使用して、その仕組みを理解することもできます。非常に便利。

80
dadoonet

Luceneでは、アナライザーはトークナイザー(スプリッター)+ステマー+ストップワードフィルターの組み合わせです

ElasticSearchでは、アナライザーは以下の組み合わせです

  1. Character filter:トークン化される前に文字列を「整理」します。例:HTMLタグを削除する
  2. Tokenizer:単一のトークナイザーが必要です。文字列を個々の用語またはトークンに分割するために使用されます
  3. 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:

  1. Luceneアナライザーの比較
  2. http://www.elasticsearch.org/guide/en/elasticsearch/guide/current/custom-analyzers.html
11
Tho

github repo にある素晴らしいプラグインです。 Analyze API の拡張です。公式の弾性プラグイン list で見つけました。

すばらしいのは、すべてのステップの後にすべての属性を持つトークンを表示することです。これにより、アナライザーの構成をデバッグし、そのようなトークンを取得した理由と、必要なトークンを失った場所を簡単に確認できます。

今日よりも早く見つけてほしい。そのおかげで、なぜkeyword_repeatトークントークナイザーが正しく機能していないようです。この問題は、次のトークンフィルターが原因で発生しました:icu_transform(音訳に使用)これは、残念ながらキーワード属性を尊重せず、すべてのトークンを変換しました。このプラグインでない場合、他にどのように原因を見つけることができるかわかりません。

0
slawek