1。概要
分析とは何ですか?
分析は、Elasticsearchがドキュメントを送信する前に、ドキュメントの本文に対して実行して、反転インデックスに追加するプロセスです。インデックスにドキュメントを追加する前に、Elasticsearchは分析されたフィールドごとに多くの手順を実行します。
Character filtering
(文字フィルター):文字フィルターを使用して文字を変換しますBreaking text into tokens
(テキストをタグに変換):テキストを1つ以上のタグのグループに分割しますToken filtering
:タグフィルターを使用して各タグを変換しますToken indexing
:これらのタグをインデックスに保存します
次に、各ステップについて詳しく説明しますが、最初に、図に要約されているプロセス全体を見てみましょう。図5.1は、分析マークとして「NoSqlとビッグデータテクノロジーでの経験を共有する」を示しています。シェア、あなた、経験、with、nosql、ビッグ、データ、ツール、およびテクノロジーです。
上に示されているのは、文字フィルター、標準のトークナイザー、およびトークンフィルターで構成されるカスタムアナライザーです。上の写真はとても良いです。アナライザーの基本的なコンポーネントと、各パーツが何を表現する必要があるかを簡潔に説明しています。
ドキュメントが取り込みノードに含まれている場合は常に、次の手順を実行して、最終的にドキュメントをElasticsearchデータベースに書き込む必要があります。
上の真ん中の部分はアナライザーと呼ばれ、アナライザーです。これには、Char Filters、Tokenizer、およびTokenFilterの3つの部分があります。それらの機能は次のとおりです。
- 文字フィルター:文字フィルターの役割は、HTMLタグの削除や、上記の「&」から「and」文字への変換などのクリーンアップタスクを実行することです。
- トークナイザー:次のステップは、テキストをトークンと呼ばれる用語に分割することです。これはトークナイザーによって行われます。分割は、任意のルール(スペースなど)に基づいて実行できます。トークナイザーの詳細については、次のURLにアクセスしてください:https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-tokenizers.html。
- トークンフィルター:トークンが作成されると、トークンフィルターに渡され、トークンが正規化されます。トークンフィルターは、トークンを変更したり、用語を削除したり、トークンに用語を追加したりできます。
2.発生時間
アナライザーは、入力文字ストリームをトークンに分解するプロセスを実行します。これは通常、次の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)のデフォルトアナライザーです。
- チャーフィルターなし
- 使用standard tokonizer
- 文字列を小文字に変更し、いくつかのストップワードなどを選択的に削除します。デフォルトでは、ストップワードは_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