1. ESの基本的な使い方
1. インデックスを作成する
テストインデックスhttp://localhost:9200/testを作成します。
2. インデックスの削除
3. インデックスを表示する
4. 新しいデータをインデックスに追加します
http://localhost:9200/person/_doc/
5. データの検索
http://localhost:9200/person/_doc/_search?q=first_name:wj
しかし、一致するものは見つからず、後から調べたところ、以前追加した wj8 と書く必要があることがわかりました。
2. Kibanaの使用
http://localhost:5601/app/home#/
Kibana はデフォルトで起動される ES に接続します
3. 検索の ES 実装の原則 (更新予定)
Elasticsearch (非リレーショナル データベース) ⇒ インデックス ⇒ ドキュメント ⇒ フィールド
実行中の ES インスタンスがノードです。
4. Mysql、ESデータの同期
mysql データが変更されると、それに応じて elasticsearch も変更する必要があります。これがelasticsearch と mysql の間のデータ同期です。
一般的なデータ同期ソリューションは 3 つあります。
1. 同期呼び出し
-
利点: 実装が簡単、粗雑
-
短所: 高度なビジネス結合
2. 非同期通知
-
利点: 低カップリング、平均的な実装難易度
-
短所: mq の信頼性に依存する
3. ビンログを監視する
-
利点: サービスを完全に分離
-
欠点: binlog を有効にすると、データベースの負担が増加し、実装が複雑になります。
転載場所: ES と MYSQL 間のデータ同期_初心者ですが、C と V が好きです blog-CSDN blog_es+mysql
その中には、オープンソース ミドルウェアのバイナリログがあります。
現在、中国には、Alibaba のオープンソース binlog 同期ツールである Canal というより優れたツールがあります。Binlog は解析でき、解析されたデータは任意のターゲット ストレージに同期されます。
まだ一つあるのですが、
ただし、go-mysql-elasticsearch には mysql と es のバージョン要件があります。
MySQL supported version < 8.0
ES supported version < 6.0
次に、ES 公式 Web サイトには Logstash もあります。
Logstash は、複数のソースからデータを取り込んで変換し、お気に入りの「リポジトリ」に送信する、無料でオープンなサーバー側のデータ処理パイプラインです。
Logstash は、さまざまなデプロイメントと統合できる強力なツールです。さまざまなソースからのデータの解析、強化、変換、バッファリングに役立つプラグインが多数提供されています。Beats では利用できない追加の処理がデータに必要な場合は、Logstash をデプロイメントに追加する必要があります。
ダウンロード アドレス: Logstash 7.17.6 | Elastic
jdbcに接続する必要があるので、jarを導入しました。
5. ES中国語単語セグメンター
トークナイザー | 効果 |
標準 | ES のデフォルトのトークナイザー、単語を分類し、小文字の処理を実行します。 |
単純 | 非文字に従って分割し、非文字を削除して小文字処理を実行します |
停止 | ストップ ワードに基づいてフィルタし、小文字の処理を実行します。ストップ ワードには、the、a、is が含まれます。 |
空白 | スペースに応じて分割、中国語はサポートされていません |
言語 | 30を超える一般的な言語の単語セグメンタを提供すると言われていますが、中国語はサポートしていません。 |
パタパタ | 単語の分割は正規表現に従って実行され、デフォルトは \W+ で、文字以外を表します。 |
キーワード | 単語の分割なし、全体として出力 |
標準トークナイザー:
英文:
POST _analyze
{
"analyzer":"standard",
"text": "hello world"
}
结果:
{
"tokens" : [
{
"token" : "hello",
"start_offset" : 0,
"end_offset" : 5,
"type" : "<ALPHANUM>",
"position" : 0
},
{
"token" : "world",
"start_offset" : 6,
"end_offset" : 11,
"type" : "<ALPHANUM>",
"position" : 1
}
]
}
中文:
POST _analyze
{
"analyzer":"standard",
"text": "我是中国人"
}
结果: 拆成单个字了,不理想
{
"tokens" : [
{
"token" : "我",
"start_offset" : 0,
"end_offset" : 1,
"type" : "<IDEOGRAPHIC>",
"position" : 0
},
{
"token" : "是",
"start_offset" : 1,
"end_offset" : 2,
"type" : "<IDEOGRAPHIC>",
"position" : 1
},
{
"token" : "中",
"start_offset" : 2,
"end_offset" : 3,
"type" : "<IDEOGRAPHIC>",
"position" : 2
},
{
"token" : "国",
"start_offset" : 3,
"end_offset" : 4,
"type" : "<IDEOGRAPHIC>",
"position" : 3
},
{
"token" : "人",
"start_offset" : 4,
"end_offset" : 5,
"type" : "<IDEOGRAPHIC>",
"position" : 4
}
]
}
明らかに中国語は非常に不親切なので、オープンソースの IK 単語セグメンターがこの問題を解決します。IK は現在、中国語を最もサポートしているプラグインです。
POST _analyze
{
"analyzer":"ik_smart",
"text": "我是中国人"
}
POST _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" : 5,
"type" : "CN_WORD",
"position" : 2
}
]
}