【Elasticsearch】Elasticsearchアナライザー

ここに写真の説明を挿入

1。概要

分析とは何ですか?

分析は、Elasticsearchがドキュメントを送信する前に、ドキュメントの本文に対して実行して、反転インデックスに追加するプロセスです。インデックスにドキュメントを追加する前に、Elasticsearchは分析されたフィールドごとに多くの手順を実行します。

  1. Character filtering (文字フィルター):文字フィルターを使用して文字を変換します
  2. Breaking text into tokens (テキストをタグに変換):テキストを1つ以上のタグのグループに分割します
  3. Token filtering:タグフィルターを使用して各タグを変換します
  4. Token indexing:これらのタグをインデックスに保存します

次に、各ステップについて詳しく説明しますが、最初に、図に要約されているプロセス全体を見てみましょう。図5.1は、分析マークとして「NoSqlとビッグデータテクノロジーでの経験を共有する」を示しています。シェア、あなた、経験、with、nosql、ビッグ、データ、ツール、およびテクノロジーです。
ここに写真の説明を挿入

上に示されているのは、文字フィルター、標準のトークナイザー、およびトークンフィルターで構成されるカスタムアナライザーです。上の写真はとても良いです。アナライザーの基本的なコンポーネントと、各パーツが何を表現する必要があるかを簡潔に説明しています。

ドキュメントが取り込みノードに含まれている場合は常に、次の手順を実行して、最終的にドキュメントをElasticsearchデータベースに書き込む必要があります。

ここに写真の説明を挿入
上の真ん中の部分はアナライザーと呼ばれ、アナライザーです。これには、Char Filters、Tokenizer、およびTokenFilterの3つの部分があります。それらの機能は次のとおりです。

  1. 文字フィルター:文字フィルターの役割は、HTMLタグの削除や、上記の「&」から「and」文字への変換などのクリーンアップタスクを実行することです。
  2. トークナイザー:次のステップは、テキストをトークンと呼ばれる用語に分割することです。これはトークナイザーによって行われます。分割は、任意のルール(スペースなど)に基づいて実行できます。トークナイザーの詳細については、次のURLにアクセスしてください:https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-tokenizers.html。
  3. トークンフィルター:トークンが作成されると、トークンフィルターに渡され、トークンが正規化されます。トークンフィルターは、トークンを変更したり、用語を削除したり、トークンに用語を追加したりできます。

2.発生時間

アナライザーは、入力文字ストリームをトークンに分解するプロセスを実行します。これは通常、次の2つの場合に発生します。

  1. インデックスを作成するとき、つまりインデックスを作成するとき
  2. 検索するとき、つまり検索するときは、検索する必要のある単語を分析します

ここに写真の説明を挿入

3.箱から出してアナライザーを使用します

Elasticsearchは、すぐに使用できるより豊富なアナライザーをすでに提供しています。独自のトークンアナライザーを作成することも、既存のcharフィルター、トークナイザー、トークンフィルターを使用して新しいアナライザーに再結合したり、ドキュメントの各フィールドに独自のアナライザーを定義したりすることもできます。アナライザーに興味がある場合は、当社のWebサイトhttps://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-analyzers.htmlを参照してください。

デフォルトでは、標準アナライザーはElasticsearch(https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-standard-analyzer.html)のデフォルトアナライザーです。

  1. チャーフィルターなし
  2. 使用standard tokonizer
  3. 文字列を小文字に変更し、いくつかのストップワードなどを選択的に削除します。デフォルトでは、ストップワードは_none_です。つまり、ストップワードはフィルタリングされません。

ここに写真の説明を挿入
一般的に、アナライザーは次の部分に分けることができます。

0个或1个以上的character filter
1个tokenizer
0个或1个以上的token filter

ここに写真の説明を挿入

3.APIを分析する

GET /_analyze
POST /_analyze
GET /<index>/_analyze
POST /<index>/_analyze

_analyze APIを使用して、アナライザーが文字列をどのように解析するかをテストします。

GET /_analyze
{
    
    
  "analyzer": "standard",
  "text": "Quick Brown Foxes!"
}

戻り結果:

  "tokens" : [
    {
    
    
      "token" : "quick",
      "start_offset" : 0,
      "end_offset" : 5,
      "type" : "<ALPHANUM>",
      "position" : 0
    },
    {
    
    
      "token" : "brown",
      "start_offset" : 6,
      "end_offset" : 11,
      "type" : "<ALPHANUM>",
      "position" : 1
    },
    {
    
    
      "token" : "foxes",
      "start_offset" : 12,
      "end_offset" : 17,
      "type" : "<ALPHANUM>",
      "position" : 2
    }
  ]
}

ここでは、文字列を3つのトークンに分解し、それぞれの位置情報を表示する標準アナライザーを使用します。

別の例は次の場合です

GET _analyze
{
    
    
  "analyzer": "ik_smart",
  "text": "我是社会主义接班人"
}

# 结果
{
    
    
  "tokens" : [
    {
    
    
      "token" : "我",
      "start_offset" : 0,
      "end_offset" : 1,
      "type" : "CN_CHAR",
      "position" : 0
    },
    {
    
    
      "token" : "是",
      "start_offset" : 1,
      "end_offset" : 2,
      "type" : "CN_CHAR",
      "position" : 1
    },
    {
    
    
      "token" : "社会主义",
      "start_offset" : 2,
      "end_offset" : 6,
      "type" : "CN_WORD",
      "position" : 2
    },
    {
    
    
      "token" : "接班人",
      "start_offset" : 6,
      "end_offset" : 9,
      "type" : "CN_WORD",
      "position" : 3
    }
  ]
}

もう一つの例

GET _analyze
{
    
    
  "analyzer": "ik_max_word",
  "text": "我是社会主义接班人"
}

# 结果

{
    
    
  "tokens" : [
    {
    
    
      "token" : "我",
      "start_offset" : 0,
      "end_offset" : 1,
      "type" : "CN_CHAR",
      "position" : 0
    },
    {
    
    
      "token" : "是",
      "start_offset" : 1,
      "end_offset" : 2,
      "type" : "CN_CHAR",
      "position" : 1
    },
    {
    
    
      "token" : "社会主义",
      "start_offset" : 2,
      "end_offset" : 6,
      "type" : "CN_WORD",
      "position" : 2
    },
    {
    
    
      "token" : "社会",
      "start_offset" : 2,
      "end_offset" : 4,
      "type" : "CN_WORD",
      "position" : 3
    },
    {
    
    
      "token" : "主义",
      "start_offset" : 4,
      "end_offset" : 6,
      "type" : "CN_WORD",
      "position" : 4
    },
    {
    
    
      "token" : "接班人",
      "start_offset" : 6,
      "end_offset" : 9,
      "type" : "CN_WORD",
      "position" : 5
    },
    {
    
    
      "token" : "接班",
      "start_offset" : 6,
      "end_offset" : 8,
      "type" : "CN_WORD",
      "position" : 6
    },
    {
    
    
      "token" : "人",
      "start_offset" : 8,
      "end_offset" : 9,
      "type" : "CN_CHAR",
      "position" : 7
    }
  ]
}

転載:https://www.cnblogs.com/sanduzxcvbnm/p/12084607.html

おすすめ

転載: blog.csdn.net/qq_21383435/article/details/108813759