Elasticsearch-分析

検索操作中にクエリが処理されると、任意のインデックスのコンテンツが分析モジュールによって分析されます。このモジュールは、アナライザー、トークナイザー、tokenfilters、charfiltersで構成されています。アナライザーが定義されていない場合、デフォルトでは、組み込みのアナライザー、トークン、フィルター、およびトークナイザーが分析モジュールに登録されます。

次の例では、他のアナライザーが指定されていない場合に使用される標準アナライザーを使用します。文法に基づいて文を分析し、文で使用される単語を生成します。

POST _analyze
{
   "analyzer": "standard",
   "text": "Today's weather is beautiful"
}

上記のコードを実行すると、次のような応答が得られます。

{
   "tokens" : [
      {
         "token" : "today's",
         "start_offset" : 0,
         "end_offset" : 7,
         "type" : "",
         "position" : 0
      },
      {
         "token" : "weather",
         "start_offset" : 8,
         "end_offset" : 15,
         "type" : "",
         "position" : 1
      },
      {
         "token" : "is",
         "start_offset" : 16,
         "end_offset" : 18,
         "type" : "",
         "position" : 2
      },
      {
         "token" : "beautiful",
         "start_offset" : 19,
         "end_offset" : 28,
         "type" : "",
         "position" : 3
      }
   ]
}

標準アナライザーの構成

カスタム要件を取得するために、さまざまなパラメーターを使用して標準アナライザーを構成できます。

次の例では、max_token_lengthが5になるように標準アナライザーを構成します。

このために、最初にmax_length_tokenパラメーターを持つアナライザーを使用してインデックスを作成します。

PUT index_4_analysis
{
   "settings": {
      "analysis": {
         "analyzer": {
            "my_english_analyzer": {
               "type": "standard",
               "max_token_length": 5,
               "stopwords": "_english_"
            }
         }
      }
   }
}

次に、以下に示すテキストを使用してアナライザーを適用します。トークンは最初に2つのスペースがあり、最後に2つのスペースがあるため、表示されないことに注意してください。「is」という単語の場合、先頭にスペースがあり、末尾にスペースがあります。それらすべてをとると、スペース付きの4文字になり、単語にはなりません。カウントされる単語にするために、少なくとも最初または最後に非スペース文字が必要です。

POST index_4_analysis/_analyze
{
   "analyzer": "my_english_analyzer",
   "text": "Today's weather is beautiful"
}

上記のコードを実行すると、次のような応答が得られます。

{
   "tokens" : [
      {
         "token" : "today",
         "start_offset" : 0,
         "end_offset" : 5,
         "type" : "",
         "position" : 0
      },
      {
         "token" : "s",
         "start_offset" : 6,
         "end_offset" : 7,
         "type" : "",
         "position" : 1
      },
      {
         "token" : "weath",
         "start_offset" : 8,
         "end_offset" : 13,
         "type" : "",
         "position" : 2
      },
      {
         "token" : "er",
         "start_offset" : 13,
         "end_offset" : 15,
         "type" : "",
         "position" : 3
      },
      {
         "token" : "beaut",
         "start_offset" : 19,
         "end_offset" : 24,
         "type" : "",
         "position" : 5
      },
      {
         "token" : "iful",
         "start_offset" : 24,
         "end_offset" : 28,
         "type" : "",
         "position" : 6
      }
   ]
}

さまざまなアナライザーのリストとその説明を以下の表に示します。

S.No アナライザーと説明
1

Standard analyzer (standard)

このアナライザーには、ストップワードとmax_token_length設定を設定できます。デフォルトでは、ストップワードリストは空で、max_token_lengthは255です。

2

Simple analyzer (simple)

このアナライザーは小文字のトークナイザーで構成されています。

3

Whitespace analyzer (whitespace)

このアナライザーは、空白のトークナイザーで構成されています。

4

Stop analyzer (stop)

stopwordsとstopwords_pathを構成できます。デフォルトでは、英語のストップワードに初期化されたストップワードとstopwords_pathには、ストップワードを含むテキストファイルへのパスが含まれています。

トークナイザー

トークナイザーは、Elasticsearchのテキストからトークンを生成するために使用されます。テキストは、空白やその他の句読点を考慮してトークンに分割できます。Elasticsearchには、カスタムアナライザーで使用できるトークン化機能が多数組み込まれています。

文字ではない文字に遭遇するたびにテキストを用語に分割するが、すべての用語を小文字にするトークナイザーの例を以下に示します。

POST _analyze
{
   "tokenizer": "lowercase",
   "text": "It Was a Beautiful Weather 5 Days ago."
}

上記のコードを実行すると、次のような応答が得られます。

{
   "tokens" : [
      {
         "token" : "it",
         "start_offset" : 0,
         "end_offset" : 2,
         "type" : "word",
         "position" : 0
      },
      {
         "token" : "was",
         "start_offset" : 3,
         "end_offset" : 6,
         "type" : "word",
         "position" : 1
      },
      {
         "token" : "a",
         "start_offset" : 7,
         "end_offset" : 8,
         "type" : "word",
         "position" : 2
      },
      {
         "token" : "beautiful",
         "start_offset" : 9,
         "end_offset" : 18,
         "type" : "word",
         "position" : 3
      },
      {
         "token" : "weather",
         "start_offset" : 19,
         "end_offset" : 26,
         "type" : "word",
         "position" : 4
      },
      {
         "token" : "days",
         "start_offset" : 29,
         "end_offset" : 33,
         "type" : "word",
         "position" : 5
      },
      {
         "token" : "ago",
         "start_offset" : 34,
         "end_offset" : 37,
         "type" : "word",
         "position" : 6
      }
   ]
}

トークナイザーとその説明のリストを以下の表に示します-

S.No トークナイザーと説明
1

Standard tokenizer (standard)

これは文法ベースのトークナイザーに基づいて構築されており、max_token_lengthをこのトークナイザー用に構成できます。

2

Edge NGram tokenizer (edgeNGram)

min_gram、max_gram、token_charsなどの設定をこのトークナイザーに設定できます。

3

Keyword tokenizer (keyword)

これにより、入力全体が出力として生成され、buffer_sizeを設定できます。

4

Letter tokenizer (letter)

これにより、文字以外が検出されるまで単語全体がキャプチャされます。