1.Elasticsearchとは
Elasticsearchは、Luceneをベースにした分散型のオープンソース検索および分析エンジンです。これは、RESTful WEBインターフェイスに基づいて、分散マルチユーザー機能を備えたフルテキスト検索エンジンを提供します。ElasticsearchはJavaで開発され、Apacheライセンスの条件の下でオープンソースとしてリリースされています。これは人気のあるエンタープライズ検索エンジンです。
2.DockerはElasticsearchをインストールします
次のコマンドを使用して、開発またはテストのためにElasticsearchをすばやく開始できます。
1.ミラーを引く
docker pull elasticsearch:6.4.0
2.セットアップコンテナを実行します
docker run --name es -p 9200:9200 -p 9300:9300 -e ES_JAVA_OPTS="-Xms256m -Xmx256m" -d elasticsearch:6.4.0
# -d 表示在后台运行
# 也可以设置ES_JAVA_OPTS内存使用限制
3.実行されているかどうかを確認します
docker ps
すでにあることがわかります
次に、接続できるかどうかをテストしましょう。Enter{ Server IP }:9200上記のメッセージが表示され、成功を示します。
3.DockerはIKトークナイザーをインストールします
1.コンテナを入力します
docker exec -it es /bin/bash
2.オンラインでダウンロードしてインストールします
./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.5.4/elasticsearch-analysis-ik-6.5.4.zip
3.プラグインフォルダに入り、IKトークナイザーを確認します
Ikは中国語の単語セグメンテーションプラグインです。elasticSearchに付属する中国語の単語セグメンテーションは非常に専門的ではなく、ikは中国語の単語セグメンテーションをより適切にサポートします。
4.視覚化プラグインKibanaをインストールします
Elasticsearchと同じバージョンのミラー6.4.0を使用することをお勧めします(異なると問題が発生する可能性があります)
1.キバナミラーをダウンロードする
docker pull kibana:6.4.0
2.kibana.yml構成ファイルを編集します
kibana.yml構成ファイルはホストの** / data / elk / **ディレクトリに配置され、内容は次のとおりです。
# Default Kibana configuration for docker target
server.name: kibana
server.host: "0"
elasticsearch.hosts: [ "http://(你的服务器IP):9200" ]
xpack.monitoring.ui.container.elasticsearch.enabled: true
3.运行 Kibana
docker run –name kibana -p 5601:5601 -v /data/elk/kibana.yml:/usr/share/kibana/config/kibana.yml --restart=always -d kibana:6.4.0
4.コンテナの起動ステータスを表示します
docker ps
5.启动kibana
http:// {server's IP}:5601にアクセスします(起動が遅い場合があります。失敗した場合は、数秒待ってから更新してください)
5. ESの使用法(基本クエリ、集計クエリ
1.インデックスライブラリを作成します
ESインデックスライブラリは論理的な概念であり、単語セグメンテーションリストとドキュメントリストが含まれています。同じタイプのドキュメントが同じインデックスライブラリに保存されます。これは、MySQLのテーブル、またはMongodbのコレクションに相当します。インデックス
という用語について:
インデックス(名詞):ESは、Luceneに基づく検索サービスであり、インデックスライブラリから適格なインデックスデータを検索します。
インデックス(動詞):インデックスライブラリは、作成されたばかりのときは空です。インデックスライブラリにデータを追加するプロセスは、インデックス作成と呼ばれます。
インデックスライブラリを作成するための2つの方法を以下に紹介します。これらは同じ原理で機能し、両方のクライアントがESサービスにコマンドを送信します。
1)postmanやcurlなどのツールを使用して作成します
。puthttp:// localhost:9200 / indexライブラリ名
{
"settings":{
"index":{
"number_of_shards":1,
"number_of_replicas":0
}
}
}
number_of_shards:シャードの数を設定します。通常、クラスターには複数のシャードが設定されます。つまり、インデックスライブラリが複数のシャードに分割されて異なるノードが格納されるため、ESの処理能力と高可用性が向上します。エントリプログラムはスタンドアロン環境を使用します。 、ここでは1に設定されています。
number_of_replicas:レプリカの数を設定します。レプリカの設定はESの高信頼性を向上させるためのものであり、スタンドアロン環境は0に設定され
ます。次に、xc_courseインデックスライブラリを作成する作成例を示します。合計で1シャード、0レプリカです。
-
ヘッドプラグインで作成
2マッピングを作成します
2.1コンセプトの説明
インデックス内の各ドキュメントには、1つ以上のフィールドが含まれます。マッピングの作成は、インデックスライブラリにフィールドを作成するプロセスです。以下は、ドキュメントとフィールドの概念とリレーショナルデータベースの類似点です。
ドキュメント(ドキュメント)----------------行レコード
フィールド(フィールド)-------------------列注
:6.0以前のバージョンにはタイプの概念があります。タイプはリレーショナルデータベーステーブルと同等です。ES担当者はES9.0バージョンでタイプを完全に削除します。
上記のインデックスライブラリは、データベースまたはリレーショナルデータベースのテーブルに相当しますか?
1.データベースと同等の場合、インデックスライブラリはさまざまな種類のドキュメントを作成できることを意味します。これはESでも許可されています。
2.テーブルと同等の場合、インデックスライブラリは同じタイプのドキュメントのみを保存できることを意味します。ESは、同じタイプのドキュメントのみをインデックスライブラリに保存することを公式に推奨しています。
2.2マッピングを作成する
情報をESに保存します。ここで、情報のマッピングを作成します。まず、次のような簡単なマッピングから始めましょう
。send:post http:// localhost:9200 / indexライブラリ名/タイプ名/ _mappingを
使用して、タイプxc_courseのマッピングを作成します。 、名前、説明、studymondelの3つのフィールドを含みます
。ES6.0バージョンではタイプが完全に削除されていないため、当面はタイプに特別な意味はありません。
リクエスト後:http:// localhost:9200 / xc_course / doc / _mapping
は、xc_courseインデックスライブラリの下のdocタイプの下にマッピングを作成することを意味します。docは、カスタマイズ可能なタイプ名です。ES6.0では、タイプの概念を弱め、特定のビジネス上の意味を持たない名前を付ける必要があります。
{
"properties": {
"name": {
"type": "text"
},
"description": {
"type": "text"
},
"studymodel": {
"type": "keyword"
}
}
}
マッピングが正常に作成されました。ヘッドインターフェイスを確認してください。
image.png
3.ドキュメントを作成します
ESのドキュメントは、MySQLデータベーステーブルのレコードと同等です。
送信:putまたはPost http:// localhost:9200 / xc_course / doc / id value
(id値を指定しない場合、ESは自動的にIDを生成します)
http:// localhost:9200 / xc_course / doc / 4028e58161bcf7f40161bcf8b77c0000
{
"name":"Bootstrap开发框架",
"description":"Bootstrap是由Twitter推出的一个前台页面开发框架,在行业之中使用较为广泛。此开发框架包含了大量的CSS、JS程序代码,可以帮助开发者(尤其是不擅长页面开发的程序人员)轻松的实现一个不受浏览器限制的精美界面效果。",
"studymodel":"201001"
}
postmanを使用してテストします。
頭からデータを照会する:
4ドキュメントを検索する
1.コースIDに従ってドキュメントをクエリします。
送信:get http:// localhost:9200 / xc_course / doc / 4028e58161bcf7f40161bcf8b77c0000postmanを
使用してテストします。
2.すべてのレコードをクエリして
gethttp:// localhost:9200 / xc_course / doc / _searchを送信し
ます。3 。名前にspringキーワードを含むレコードをクエリして、次を
送信します。gethttp:// localhost:9200 / xc_course / doc / _search?q = name:bootstrap
4.学習モードが201001であるレコードを照会し、
get http:// localhost:9200 / xc_course / doc / _search?q = studymodel:201001を送信します。
4.1クエリ結果の分析
{
"took": 4,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 1,
"max_score": 1,
"hits": [
{
"_index": "xc_course",
"_type": "doc",
"_id": "4028e58161bcf7f40161bcf8b77c0000",
"_score": 1,
"_source": {
"name": "Bootstrap开发框架",
"description": "Bootstrap是由Twitter推出的一个前台页面开发框架,在行业之中使用较为广泛。此开发框架包含了大量的CSS、JS程序代码,可以帮助开发者(尤其是不擅长页面开发的程序人员)轻松的实现一个不受浏览器限制的精美界面效果。",
"studymodel": "201001"
}
}
]
}
}
かかった時間:この操作に費やされた時間(ミリ秒単位)。
timed_out:リクエストがタイムアウトしたかどうか_shards:
この操作で検索されたシャードを示します
ヒット:検索ヒットのレコードヒット
合計:条件を満たすドキュメントの総数hits.hits:一致度の高い上位N個のドキュメント
ヒットmax_score:ドキュメント一致スコア、ここに最高スコアがあります
_score:各ドキュメントには一致スコアがあり、降順でソートされています。
_source:ドキュメントの元のコンテンツを表示します。
5マッピングタイプ
1.マッピングの保守方法
1.すべてのインデックスのマッピングをクエリします
。GET:http:// localhost:9200 / _mapping
2.マッピング
ポストリクエストを作成します:http:// localhost:9200 / xc_course / doc / _mapping
例:
{
"properties": {
"name": {
"type": "text"
},
"description": {
"type": "text"
},
"studymodel": {
"type": "keyword"
}
}
}
3.マッピングを更新します。
マッピングが正常に作成された後に新しいフィールドを追加できます。既存のフィールドは更新できません。
4.マッピング
を削除するインデックスを削除して、マッピングを削除します。
2.一般的なマッピングタイプ
2.1テキストテキストフィールド
文字列には、テキストとキーワードの2つのタイプがあります
。1。テキスト
1)アナライザー
は、アナライザー属性を介してトークナイザーを指定します。
以下に指定する名前のフィールドタイプはテキストであり、ikトークナイザーのik_max_wordワードセグメンテーションモードが使用されます。
"name": {
"type": "text",
"analyzer":"ik_max_word"
}
上記のアナライザーは、ik_max_wordがインデックス作成と検索の両方で使用されることを意味します。検索で使用されるワードセグメンターを個別に定義する場合は、search_analyzer属性を使用できます。
ikトークナイザーの提案は、インデックス作成時に検索コンテンツのきめ細かい単語セグメンテーションにik_max_wordを使用し、検索精度を向上させるためにik_smartを使用することです。
"name": {
"type": "text",
"analyzer":"ik_max_word",
"search_analyzer":"ik_smart"
}
2)index
は、index属性を介してインデックスを作成するかどうかを指定します。
デフォルトはindex = trueです。つまり、インデックスが作成され、インデックスライブラリから検索できるのはインデックスのみです。
ただし、インデックスを作成する必要のないコンテンツもあります。たとえば、製品の画像アドレスは画像の表示にのみ使用され、画像の検索には使用されません。この場合、インデックス
をfalseに設定できます。
インデックスを削除し、マッピングを再作成し、写真のインデックスをfalseに設定し、写真に基づいて検索を試みますが、データが見つかりません
pic": {
"type": "text",
"index":false
}
3)ストア
がソースの外部に保存されているかどうか。各ドキュメントにインデックスが付けられると、元のドキュメントのコピーが「_source」に保存されます。通常、_sourceにはすでにコピーがあるため、storeをtrueに設定する必要はありません。元のドキュメント。
2.2キーワードフィールド
上記で紹介したテキストフィールドは、マッピング時にワードセグメンターが必要です。キーワードフィールドはキーワードフィールドです。通常、検索キーワードは検索全体に基づいているため、キーワードフィールドのインデックスを作成するときに、郵便番号、携帯電話番号、 IDカードなど キーワードフィールドは通常、フィルタリング、並べ替え、集計などに使用されます。
2。3日付日付タイプ
日付タイプにトークナイザーを設定する必要はありません。
通常、日付タイプのフィールドは並べ替えに使用されます。
1)
フォーマットは、フォーマットを介して日付フォーマットを設定します。
例:
次の設定により、日付フィールドに、年、月、日、時、分、秒、年、月、日、ミリ秒の3つのフォーマットを格納できます。
{
"properties": {
"timestamp": {
"type": "date",
"format": "yyyy‐MM‐dd HH:mm:ss||yyyy‐MM‐dd"
}
}
}
2.4数値タイプ
ESでサポートされている数値タイプは次のとおりです
。1。検索効率を向上させるために範囲の狭いタイプを選択してみてください
。2。浮動小数点数の場合は、元単位の価格フィールドなどのスケール係数を使用してみてください。スケール係数を100に設定します。これはESになります。ポイントごとに保存されたマッピングは次のとおりです。
"price": {
"type": "scaled_float",
"scaling_factor": 100
}
スケール係数が100であるため、入力する価格が23.45の場合、ESは23.45に100を掛けて、ESに格納します。
入力した価格が23.456の場合、ESは23.456に100を掛けてから、元の値に近い数値を取得して2346を取得します。
スケール係数を使用する利点は、整数型が浮動小数点型よりも圧縮しやすく、ディスク領域を節約できることです。