1. 基本コンセプト
Elasticsearch も Lucene をベースにした全文検索ライブラリであり、その本質はデータを格納することであり、多くの概念は MySQL に似ています。
比較関係:
インデックス (インデックス) --------------------- データベース データベースの
種類 (タイプ) ------------------ - -------テーブル データ テーブル [7.x 廃止]
ドキュメント (Document)----------------------行行
フィールド (Field)- - -----------------------Columns カラム
Elasticsearch 自体は分散されているため、ノードが 1 つしかない場合でも、Elasticsearch はデフォルトでデータの断片化とコピー操作を実行します. クラスターに新しいデータを追加すると、データは新しく追加されたクラスターにも配置されます.ノードはバランスが取れています。
2.インデックス操作
1. クエリ インデックス
es で使用可能なインデックス ライブラリを確認します(mysql データベースと同様) : GET /_cat/indices?v
# es默认对中文的分词 支持不友好,它认为一个字代表一个词
# 查看es的分词方式
GET _analyze
{
"text": ["我是中国人"]
}
{
"text": "我爱你你爱我"
}
# 给es配置中文分词器:ik分词器
# 指定ik分词器分词:ik_smart粗粒度分词
# ik_max_word细粒度分词
GET _analyze
{
"text": "咖喱人,鸡你太美,你这个老六",
"analyzer": "ik_max_word"
}
es には、デフォルトで .kibana および .kibana_task_manager という名前のインデックスがあります。
フィールド名 | 意味 |
---|---|
健康 | 緑 (クラスター完了) 黄色 (単一点法線、クラスターが不完全) 赤(一点は正常ではありません) |
スターテス | 使用できますか |
索引 | 索引名 |
uuid | インデックス背番号 |
で | マスターノードの数 |
担当者 | スレーブノードの数 |
docs.count | ドキュメント数 |
docs.deleted | 削除された文書の数 |
store.size | 全体のフットプリント |
pri.store.size | マスターノードのアカウント |
2. インデックスを作成する
PUT /インデックス名
オプションのパラメーター: シャードとコピーを指定します。デフォルトのシャードは 3、コピーは 2 です。
PUT /liush
{
"settings": {
"number_of_shards": 2,
"number_of_replicas": 3
}
}
3. インデックスの固有情報を表示する
GET /インデックス名
4. 索引を削除する
DELETE /index ライブラリ名
3. マッピング構成 (_mapping)
インデックスの次のステップは、データを追加することです。ただし、データを追加する前にマッピングを定義する必要があります。
マッピングとは
マッピングとは、ドキュメントを定義するプロセスであり、ドキュメントに含まれるフィールド、これらのフィールドが保存されているかどうか、索引付けされているか、単語のセグメント化されているかなどです。
構成が明確な場合にのみ、Elasticsearch はインデックス ライブラリの作成に役立ちます (必ずしもそうとは限りません)。
1. マッピング フィールドを作成する
PUT /index library name/_mapping
{ "properties": { "field name": { "type": "type", "index": true, "store": true, "analyzer": "word breaker" } } }
フィールド名: 列名と同様に、プロパティで多くのフィールドを指定できます。
各フィールドには、多くの属性を含めることができます。例えば:
type:型,String(テキストキーワード) Numeric(long integer float double) date boolean
index: インデックスを作成するかどうか、デフォルトは true
store: 保存するかどうか、デフォルトは false です。false の場合でも _source に保存されます。true の場合は追加のコピーが保存されます。
アナライザー: ワード ブレーカー、ここでは ik ワード ブレーカーを使用:または
ik_max_word
ik_smart
PUT /liush
{
"settings": {
"number_of_shards": 2,
"number_of_replicas": 3
}
}
POST /liush/_mapping
{
"properties": {
"title": {
"type": "text",
"analyzer": "ik_max_word"
},
"images":{
"type": "keyword",
"index": "false"
},
"price": {
"type": "long"
}
}
}
2. マッピング関係を表示する
構文: GET /index ライブラリ名/_mapping
4. 新規文書(ドキュメント)
インデックス、タイプ、およびマッピングを使用して、ドキュメントを追加、削除、変更、およびクエリできます。
1. 基本的なゲームプレイ
自分で追加するときに id を指定したい場合は、次のようにします。
POST /index ライブラリ名/_doc/id 値
{ ... }
POST /liush/_doc/1
{
"title": "小米手机",
"images": "http://xiaomi.com/xiaomi.igp",
"price":2999
}
GET /liush/_search
2. 知的な判断
実際、Elasticsearch は非常にスマートで、インデックス ライブラリにマッピングを設定する必要はなく、入力したデータに応じて型を判断し、データ マッピングを動的に追加することもできます。
POST /liush/_doc/2
{
"title":"小米手机",
"images":"http://image.jd.com/12479122.jpg",
"price":2899,
"stock": 200,
"saleable":true,
"attr": {
"category": "手机",
"brand": "小米"
}
}
さらに、販売可能な商品が棚にあるかどうか、および属性のその他の属性の在庫のフィールドをいくつか追加しました。
stock、saleable、および attr がすべて正常にマッピングされました。
文字列型のデータの場合、テキスト+キーワードの2種類が追加されます。上記のカテゴリーとブランドの例のように
5. データを削除する
削除は DELETE リクエストを使用します. 同様に、ID に従って削除する必要があります:
構文: DELETE /index ライブラリ名/_doc/id 値
例: DELETE /liush/_doc/2
6. ドキュメントの更新
構文:
POST /index ライブラリ名/_update/id 値
{ doc:{ "属性":"値" } }
POST /liush/_update/1
{
"doc": {
"title":"aaa"
}
}