CRUD、DSLや文書のマッピングを使用してElasticSearchの基礎

四.ElasticSearchの基礎

4.1。インデックスデータベースCRUD

4.1.1インデックス・ライブラリの増加
PUT shopping
{
	"settings":{
		"number_of_shards":5,
		"number_of_replicas":1
	}
}
4.1.2クエリインデックスライブラリ
GET _cat/indices?v

指定したインデックスのライブラリをチェック

GET _cat/indices/aigou

[画像のダンプはチェーンが失敗し、発信局は、直接アップロード(IMG-NfNnHdbX-1581164132995)(画像/ 1573717333201.png)ダウン画像を保存することが推奨され、セキュリティチェーン機構を有していてもよいです]

4.1.3。インデックスライブラリを削除します。
DELETE 名字
4.1.4。インデックスライブラリを変更
删除再添加

4.2。CRUDドキュメント

4.2.1。ドキュメントのコンセプト
ES MySQLの
_index(インデックスライブラリ) データベース
_type(ドキュメントタイプ) テーブル
_Document(ドキュメントオブジェクト) データの行
_id(文書ID) 主キーのID
フィールド(フィールド)

他の

_ソース (文書生データ - ESに格納された実データです)
_すべて (接続文字列のすべての分野)
メタデータ (ドキュメントのメタデータ - 他のデータへの実際の事故データアウト文書)
4.2.2。文書を追加します

文法

PUT 索引库/文档类型/文档id
{
	文档原始数据
}

ケース:

PUT crm/user/11	
{
	"id":11,
	"username":"zs"
}

説明:11のユーザIDの追加、インデックスライブラリCRM、型ユーザー

注:ドキュメントのIDを指定しない場合、ESは、自動的にドキュメントIDを生成します。

4.2.3。マニュアルの入手方法

。指定されたドキュメントを取得します。

GET 索引库/类型/文档ID 

B。返される列を指定します。

GET /itsource/employee/123?_source=fullName,email
4.2.4。ドキュメントを変更
。全体的に修正
PUT {index}/{type}/{id}
{
	修改后的内容
}

PS:文書がすでに存在している追加することで、または変更された場合、変更後の構文の全額と同様に、文書の構文を追加するには、

ドキュメントの変更処理:、古いマークの文書を削除します。2つの新しいドキュメントを追加する1。

B。一部改変
POST itsource/employee/123/_update
{
    "doc":{
        "email" : "[email protected]", 
        "salary": 1000
    }
}

PS:ドキュメントの変更プロセス:1.古いドキュメントを取得、2. 4.新しいドキュメントを追加し、文書を変更、古い文書は3をマークし、削除します。

4.2.5。削除ドキュメント
DELETE {index}/{type}/{id}

V.クエリ文書

5.1。一般的なクエリ

5.1.1。すべてのお問い合わせ
GET _search
5.1.2。クエリは、指定されたインデックスライブラリ
GET crm/_search
5.1.3。クエリのタイプを指定します。
GET crm/user/_search
5.1.4。クエリは、ドキュメントを指定しました
GET crm/user/11
5.1.5。ページングクエリ
&size=2&from=2
  • サイズ:ページの数
  • 形式:どのように多くの作品データの調査の初めから
5.1.6。クエリ文字列

+ +ソート基準クエリページネーション

GET crm/user/_search?q=age:17&size=2&from=2&sort=id:desc&_source=id,username

クエリ文字列(クエリ文字列)は、実際にURL文字列スプライシング検索条件の様々な背後にある方法ですが、このアプローチは、あまりにも多くの条件ので、より多くのトラブルをアップステッチ、推奨されません

5.1.7。バッチクエリ

バッチクエリは、単一のクエリ、高容量のクエリのパフォーマンスに比べて、非常に重要です。

A。異なるインデックスデータベースクエリ
GET _mget
{
    "docs" : [
        {
            "_index" : "itsource",
            "_type" : "blog",
            "_id" : 2
        },
        {
            "_index" : "itsource",
            "_type" : "employee",
            "_id" : 1,
            "_source": "email,age"
        }
    ]
}
データベースインデックスの同じタイプのB - 推奨
GET itsource/blog/_mget
{
	"ids" : [ "2", "1" ]
}

六.DSL DSLフィルタクエリ

6.1。基本概念

6.1.1。基本概念

私の条件のような「はい」か「いいえ」(等しい、等しくない)方法のためのDSLフィルタクエリの文書が、DSLクエリ:文とクエリは非常に似ていますが、彼らの目的が異なっているDSLのDSLフィルタ例えば、「どのような」(あいまい検索)など。

6.1.2。クエリとフィルタリングの違い

DSLのDSLフィルタとクエリのパフォーマンスの違い:

  • 結果を濾過によってキャッシュされ、後続の要求に適用することができます。 - >ファジークエリのパフォーマンスの高いフィルタ正確な結果を取ります
  • クエリに一致する文書が、相関が計算され、それはより多くの時間がかかり、キャッシュしません。
  • 効果的にクエリを満たすことができるフィルタステートメントは、文書のフィルタリングを完了しています。

概要:ファジークエリのDSLクエリを使用する必要性、使用のDSLは、開発に使用される組み合わせ(組み合わせ検索)で、正確なクエリフィルタを必要とする - >クエリキーワードクエリDSLを使用して、他の人は、DSLで濾過されています。

6.2。統合されたケース

6.2.1。構文はじめに
GET crm/user/_search
{
    "query": {
       "bool": { 
              "must": [
                	{"match": {"description": "search" }}
               ],
               "filter": {
                   "term": {"tags": "lucene"}
               }
        }
    },
    "from": 20, 
    "size": 10,
    "_source": ["fullName", "age", "email"],
    "sort": [{"join_date": "desc"},{"age": "asc"}]
}

説明:

クエリ:クエリ

BOOL:お問い合わせの組み合わせ、DSLやDSLフィルタクエリを含みます

一致している必要があります:しなければならないと(MUST)または(べき)非(must_not)

一致:単語がクエリに一致する、クエリでしょう単語、multi_match:マルチフィールド一致

フィルタ:フィルタ条件

用語:元の単語のクエリは、クエリがために言葉ではありません

サイズ、から:ページング

_source:列クエリ結果の必要性

ソート:ソート

6.2.2統合されたケース

ブール値は逆順売上高に応じて、ブランドのidが14で、10000から20000の間で商品価格の「赤ちゃん」でクエリオブジェクト名(名前)です(saleCountを)(minPriceを)検索クエリの複数の組み合わせを組み合わせることができ、クエリページ1、10ページ、クエリ結果のみ:ID、名前、minPrice、brandId

GET aigou/product/_search 
{
	"query":{
		"bool": {
			"must": [{
				"match": {
					"name": "春季"
				}
			}],
			
			"filter": [
				{
                    "range":{	//范围查询
                        "minPrice":{
                            "gte":10000,
                            "lte":20000
                        }
                    }
				},
				{
					"term": {	//词元查询
						"brandId": 14
					}
				}
			]
		}
	},
	"from": 1,
	"size": 10,
	"_source": ["id", "name", "minPrice","brandId"],
	"sort": [{
		"saleCount": "desc"
	}]
}

PS:検索する他の方法

  • 用語:単語/用語の元の照会
  • 一致:単語をクエリ(ファジーマッチ)
  • multi_match:マルチフィールド一致
  • 範囲:範囲クエリ
  • 存在:あり
  • 不足している:いいえがあります
  • 接頭辞:接頭辞の一致
  • ワイルドカード:の代わりに0〜Nの数、使用するワイルドカードのマッチング、*?。

VII。マッピングドキュメント

7.1。基本概念

7.1.1。ドキュメントのマッピングは何ですか

ESドキュメントマッピングタイプを決定するためのデータの各フィールドに一致する確認応答フィールドタイプの(マッピング)メカニズム。

  • MySQLはテーブルのプロセスを構築しました:データベースの作成 - テーブル(指定したフィールドタイプ)を作成します> - > CRUDデータ
  • ESのインデックス作成:インデックス・ライブラリを作成します - >ドキュメントタイプのマッピング - > CRUDドキュメント
  • 単語のマッピング:検索フィールドを容易にするために、私には、いくつかの分野でのESに保存されている単語になりますが、いくつかのフィールドタイプは言葉に分けることができ、いくつかのフィールドタイプは、私たちが指定するために自分自身を必要とするフィールドのタイプに、サブワードすることはできません。
7.1.2。デフォルトのフィールドタイプ

GET {INDEXNAME} / _マッピング/ {型名}:インデックス・タイプ・マッピングの設定を参照

A。基本的なフィールドタイプ
  • テキスト(ワード)、(関係なく、単語の)キーワード、StringField(関係なく、ワードテキスト)、TextFiled(テキストワード)、フルテキストへのテキストのデフォルトは、非フルテキストのキーワードのデフォルト

  • 数字(長い、整数、短い、二重、フロート)

  • 日付

  • ブール論理

B。複雑なフィールドタイプ
  • オブジェクトタイプ:オブジェクト
  • アレイタイプ:配列
  • 所在地:geo_point、geo_shape
C。デフォルトのマッピング

新しいESの設定マッピング文書が存在しない場合には、ESは、フィールドタイプを推測しようとすると、動的にフィールドとタイプ間のマッピングを生成します。

JSONタイプ フィールドタイプ
ブール:trueまたはfalse 「ブール」
全体数:123 "長いです"
浮動小数点:123.45 "ダブル"
文字列、有効な日付:「2014年9月15日」 "日付"
文字列:「FOOバー」 "ストリング"
7.1.3。マッピングルール

一般的に使用されるフィールドマッピングのプロパティの構成リスト - 授業時間のフィールドを実行するには、次の属性を指定することができます

プロパティ名 説明
タイプ Typeフィールド:基本データ型、整数、ロング、日付、ブール値、キーワード、テキスト...
有効 有効になっている:デフォルトはtrueです。偽:ないインデックスではなく、検索フィルタ。
ブースト 重量挙げの倍数:重要なの紹介と、コンテンツ以外のコンテンツを検索するために、このようなタイトルサーチとして、クエリで使用される最終的なスコアを計算する加重は、アップグレードすることができます
指数 インデックスモード:分析した(インデックスとセグメンテーション、テキスト・デフォルト・モード)、not_analyzedは(関係なく、索引語、キーワードデフォルトモードの)、なし(インデックス付けされていません)
アナライザ 索引語:あなたはインデックスを作成するときに使用する単語は、そのようなik_smart、ik_max_word、標準として
search_analyzer 単語を検索します:フィールドの値を検索する場合、単語を渡してコンテンツ照会します。
田畑 マルチフィールドインデックス:フィールドは、複数のインデックスモードを使用する必要がある場合に使用します。以下のような:都市検索ニューヨーク「都市」:
"city":{  
	"type": "text",   
	"analyzer": "ik_smart",   
	"fields": {      
		"raw": {         
			"type":  "keyword"       
		}   
	}
}

説明:city.rawを取っ別名市内対応する、都市キーワードタイプは、テキスト、city.rawの一種である
。後で使用city.rawフィールドとすることができるにかかわらず、検索をフィルタリングおよびソートのcity.raw検索語検索語市名前

7.2。マッピングの追加

注:インデックスデータベースにすでにデータが含まれている場合は、追加することはできませんマッピングされました

7.2.1。新しいインデックスデータベースを作成します。
put aigou
7.2.2。シングルタイプ・マッピングの作成
put aigou/goods/_mapping
{
	"goods": {
        "properties": {
            "id": {
                "type": "long"
            },
            "name": {
                "type": "text",
                "analyzer": "ik_smart",
                "search_analyzer": "ik_smart"
            }
        }
    }
}

説明:aigouにインデックスデータベースアナライザは、ワードIKを使用して、(単語の)テキストタイプとして指定されたマッピングを作成する商品の種類、ID long型として指定され、名前であり、また、クエリワードIKを使用します

7.2.3。マルチタイプのマップを作成します。
PUT aigou
{
  "mappings": {
    "user": {
      "properties": {
        "id": {
          "type": "integer"
        },
        "info": {
          "type": "text",
          "analyzer": "ik_smart",
          "search_analyzer": "ik_smart"
        }
      }
    },
    "dept": {
      "properties": {
        "id": {
          "type": "integer"
        },
        ....更多字段映射配置
      }
    }
  }
}

説明:ユーザーDEPTにドキュメントやマップを作成します。

7.3。配列/オブジェクトのマッピング

フィールドマッピングの基本的な種類は非常に簡単です、簡単な構成では、指定されたタイプ、それの配列やオブジェクトを型に対応するが、どのように?

7.3.1。オブジェクトのマッピング
{
  "id" : 1,
  "girl" : {
      "name" : "王小花",
      "age"  : 22
  }
}

ドキュメントマップ

{ 
  "properties": {
       "id": {"type": "long"},
       "girl": {
           "properties":{
           		"name": {"type": "keyword"},
           		"age": {"type": "integer"}
           }
        }
  }
}
7.3.2。マッピングアレイ
{
	"id" : 1,
	"hobby" : ["王小花","林志玲"]
}

ドキュメントマップ

{ 
		"properties": {
            "id": {"type": "long"},
            "hobby": {"type": "keyword"}
     }
}

説明:配列要素型が同じであるため、マッピングアレイは、1つの要素にマッピングする必要があります。

7.3.3。オブジェクトの配列
{
	"id" : 1,
	"girl":[{"name":"林志玲","age":32},{"name":"赵丽颖","age":22}]
}

ドキュメントマップ

"properties": {
        "id": {
            "type": "long"
        },
        "girl": {
            "properties": {
              "age": { "type": "long" },
              "name": { "type": "text" }
            }
        }
}

7.4。グローバルマッピング

IDのすべてが、この考えに基づいて、整数型として指定することができるようインデックスデータベースの複数の種類(表)フィールドは、我々はすべての文書は、グローバル文書を使用してマッピングされているように、グローバルマップを作ることができ、同じマップです。グローバルマッピングは、動的テンプレートとデフォルトを介して2つの方法で設定することができます。

7.4.1デフォルト:. デフォルト

すべてのタイプのマッピングの設定は、次のような設定_default_インデックスを、継承します。

PUT {indexName}
{
 "mappings": {
    "_default_": { 
       "_all": {
        	"enabled": false
       }
  },
  "user": {}, 
  "dept": { 
     "_all": {
      	"enabled": true
     }
  }
 }

閉じるデフォルト_all、DEPTカスタム開いすべて

7.4.2。動的テンプレート

dynamic_templates

PUT _template/global_template  //创建名为global_template的模板
{
  "template":   "*",  //匹配所有索引库
  "settings": { "number_of_shards": 1 }, //匹配到的索引库只创建1个主分片
  "mappings": {
    "_default_": {
      "_all": { 
        "enabled": false //关闭所有类型的_all字段
      },
      "dynamic_templates": [
        {
          "string_as_text": { 
            "match_mapping_type": "string",//匹配类型string
            "match":   "*_text", //匹配字段名字以_text结尾
            "mapping": {
              "type": "text",//将类型为string的字段映射为text类型
              "analyzer": "ik_max_word",
              "search_analyzer": "ik_max_word",
              "fields": {
                "raw": {
                  "type":  "keyword",
                  "ignore_above": 256
                }
              }
            }
          }
        },
        {
          "string_as_keyword": { 
            "match_mapping_type": "string",//匹配类型string
            "mapping": {
              "type": "keyword"//将类型为string的字段映射为keyword类型
             }
          }
        }
      ]
    }
  }}

PS:道のマッピングの優先順位(低 - >高):デフォルト - >グローバル - >カスタマイズ

公開された47元の記事 ウォンの賞賛6 ビュー1577

おすすめ

転載: blog.csdn.net/yy971733014/article/details/104227732