ElasticSearch Analyzerによる使用規則の詳細


analzerの使用規則
クエリーは、逆のインデックステーブルに存在する項目のみを検索することができますので、索引の場合と検索文字列の場合は同じ分析プロセスを適用することが重要です。このようにしてクエリーの項目が逆の索引の項目にマッチすることができます。
ドキュメントを話していますが、各フィールドでアナライザが決定できます。各フィールドには異なる解析器があり、フィールドに解析器を指定するように構成することによって、より上位のタイプ(type)、インデックス(index)、またはノード(node)のデフォルト構成を使用することもできる。索引の場合、フィールド値は設定またはデフォルトの解釈に基づいて分析されます。
たとえばmy_indexにフィールドを追加します。

PUT /my_index/_mapping/my_type
{
    "my_type": {
        "properties": {
            "english_title": {
                "type":     "string",
                "analyzer": "english"
            }
        }
    }
}
今からanalze APIを使って単語Foxesを分析し、さらにenglish_を比較することができます。titleフィールドとtitleフィールドのインデックス時の分析結果:

GET /my_index/_analyze
{
"field": "my_type.title",
"text": "Foxes"
}
 
GET /my_index/_analyze
{
"field": "my_type.english_title",
"text": "Foxes"
}
  • フィールドtitleは、デフォルトのスタンダード標準アナライザを使用してワードフォックスを返します。
  • フィールドenglish_titleでは、english英語解析器を使って、ワードfoxを返します。
  • これは、底のtermを使って正確な項目foxを検索すると、english_titleフィールドはマッチしますが、titleフィールドはありません。
    matchクエリのような高層クエリーはフィールドマッピングの関係を知っています。クエリーされたフィールドごとに正しい解析器を適用することができます。この行為はvalidate-query APIを使用して確認できます。
    
    GET /my_index/my_type/_validate/query?explain
    {
        "query": {
            "bool": {
                "should": [
                    { "match": { "title":         "Foxes"}},
                    { "match": { "english_title": "Foxes"}}
                ]
            }
        }
    }
    ステートメントのexplanionの結果を返します。
    (title:foxes english_title:fox)
    各フィールドに適切な解析器を使用して、各項目を探す時に、フィールドのために正しいフォーマットを使用することを保証します。
    デフォルトのアナライザ
    私たちはフィールドの階層でアナライザを指定できますが、その階層がアナライザを指定していない場合、どのようにこのフィールドがどのアナライザを使用しているかを判断できますか?
    分析器は、フィールド、インデックス、またはグローバルデフォルトの3つのレベルから定義することができます。Elasticsearchは、使用可能な分析器が見つかるまで、以下の順序で順次処理します。索引の順番は以下の通りです。
  • フィールドマップで定義されているanalzerでなければ
  • インデックス設定の中のdefaultというアナリストは、デフォルトは
  • です。
  • standard標準アナライザ
  • 検索の順序は少し違っています。
  • 自分で定義したanalzerを調べます。そうでなければ
  • です。
  • フィールドマップで定義されているanalzerでなければ
  • インデックス設定の中のdefaultというアナリストは、デフォルトは
  • です。
  • standard標準アナライザ
  • インデックス時と検索時に異なるアナライザを使うのが合理的な場合があります。私たちは同義語のためにインデックスを作成したいかもしれません(例えば、すべてのquickが出現するところはfast、rapid、speedyのためにインデックスを作成します)。しかし、検索時には、すべての類義語を検索する必要はなく、代わりに、ユーザーが入力した単語がquick、fast、rapidまたはspeedyであるかどうかを探すことである。
    区別するために、Elasticsearchもオプションのsearch ch ch ch chをサポートします。アナリゼマッピングは検索時のみに適用されます。もう一つ等価なdefault_があります。searchマッピングは、インデックス層のデフォルトの構成を指定します。
    これらの追加パラメータを考慮すると、検索時の完全な順序は以下のようになります。
  • 自分で定義したanalzerを調べます。そうでなければ
  • です。
  • フィールドマップで定義されたsearch ch ch ch ch ch uアナリゼ、そうでなければ
  • フィールドマップで定義されているanalzerでなければ
  • インデックス設定の中の名前はdefault_です。searchのアナライザは、デフォルトは
  • です。
  • インデックス設定の中のdefaultというアナリストは、デフォルトは
  • です。
  • standard標準アナライザ
  • Elasticsearch分詞(Analyzer)
    一、Analysisとは?
    Analysisを分詞といい、テキストを一連の単語に変換する過程です。
    AnalysisはAnalyzerによって実現されます。
    Elasticserach内蔵の分析器を使用したり、必要に応じてデマンドを最適化したり、アナライザプラグインをインストールしたりすることができます。
    データを書き込む時に、フレーズをQuery文で検索する時も同じアナライザを使う必要があります。
    二、Analyzerの構成と作業メカニズム
    Charcter Filterは、オリジナルテキストに対して処理し、例えば、htmlを削除する。
    Tokenizerは規則によって単語に切り分けられます。Tokenizer Filterは切り分けられた単語を加工し、小文字し、stopworssを削除し、類義語を追加します。
    在这里插入图片描述
    三、Elasticserach内蔵のいくつかの分詞器
    1)_analzer APIの3つの使用方法

    2)Standard Analyzer
    原理
    在这里插入图片描述

    在这里插入图片描述
    3)Simple Analyzer
    原理
    在这里插入图片描述

    在这里插入图片描述
    4)ホワイトパスAnalyzer
    原理
    在这里插入图片描述

    在这里插入图片描述
    5)Stop Analyzer
    原理
    在这里插入图片描述

    在这里插入图片描述
    6)Keyword Analyzer
    原理
    在这里插入图片描述

    在这里插入图片描述
    7)Pattern Analyzer
    原理
    在这里插入图片描述

    在这里插入图片描述
    8)Language Analyzer
    言語別の単語をサポートします。


    在这里插入图片描述
    四、中国語の分詞
    中国語の分詞の難点:
    中国語の文章は一つの言葉に切ります。英語では単語に自然なスペースがあります。一つの中国語は、異なる文脈で、異なる理解があります。
    1)ICU Analyzer
    原理
    在这里插入图片描述
    デモ(事前にICU Analyzeプラグインをインストールする必要があります)
    在这里插入图片描述
    2)IK
    在这里插入图片描述
    3)THULAC
    在这里插入图片描述
    以上は個人の経験ですので、参考にしていただければと思います。