主にURLを検索すると、リクエストボディ検索構文であるかについて前。説明するために、動的マッピングと手動のマッピングマッピングを作成するためのBenpian。
1.マッピングとは何ですか
- データベーススキーマのマッピングと同様の定義は、以下の効果
- 名前定義されたインデックスフィールド
- などの文字列、数値、等のフィールドデータ型定義、
- フィールドは、逆索引の構成は、例えば、フィールドを構成することによってインデックス付け(分析又は、アナライザ分析されない)する必要があるかもしれません
- フラットなマッピングをマッピングJSONドキュメント形式は、Luceneのを必要とします
- 7.0指標だけタイプ(_DOC)後、型のインデックスの一部をマッピング
- 定義されたタイプのマッピング
- 7.0、マッピング定義で情報の種類を指定する必要はありません
2.一般的なデータ・タイプ・フィールド
- シンプルタイプ
- テキスト/キーワード
- 日付
- 整数/浮動/ダブル/ロング
- ブーリアン
- IP
- 複合型 - オブジェクトおよびネストされたオブジェクト
- オブジェクト・タイプ/ネストされたタイプ
- 特殊タイプ(地理情報のための特別な処理)
- geo_point&geo_shape /パーコレーター
3.1動的マッピングとは何ですか
動的マッピングは自動的に文書情報に基づいて、手動でマッピングを作成する必要はありませんのでこと、フィールドの型を計算します。インデックスが存在しないと場合書かれた文書では、それが自動的にインデックスを作成します。しかし時には誤っ例えば地理的位置情報として、計算されます。そうでない場合のタイプは、それが正常に動作しない機能いくつかの原因となります場合は、この時点に特別な注意を払います。
以下は、自動認識Elasticsearchを入力JSONタイプをまとめ
3.2.Json型型変換マッピングおよびElasticsearch
JSONタイプ | Elasticsearchタイプ |
---|---|
弦 | 1.日に、日付形式と一致する 2.スイッチのfloat値または長い、デフォルトで閉じ テキスト、および増加に3スイッチのキーワード |
ブール値 | ブーリアン |
フロート | 浮く |
整数 | 長いです |
オブジェクト | オブジェクト |
配列 | 最初の非ヌル値の種類によって決定さ |
ヌル | 無視します |
PUT mapping_test/_doc/1
{
"name":"al",
"age":15,
"ageStr":"15",
"birth":"2019-12-18",
"arg":["aaa","1"],
"flag":false
}
GET mapping_test/_mapping
3.3。することができます私の変更マッピングフィールドタイプ
- 新しいフィールドの状況、真の動的なセットは、文書が更新マッピング、新しいフィールドに書かれています。ダイナミックがfalseに設定され、マッピングが更新されていない、新しいフィールドがインデックス化されることはありません。新しいフィールドに厳密に、書かれた文書への動的セットが直接エラーになります。
- そして、のLuceneによって生成されたESがインデックスを反転するので、一度作成していないように変更、フィールド定義を変更することはできません既存のデータフィールドがあり、
- あなたは本当にインデックスを変更する必要がある場合は再インデックスAPIによって再構築することができます
PUT mapping_test/_mapping
{
"dynamic":"false"
}
PUT mapping_test/_doc/2
{
"name":"al",
"age":15,
"ageStr":"15",
"birth":"2019-12-18",
"arg":["aaa","1"],
"flag":false,
"addCol":"test"
}
GET mapping_test/_search
{
"query": {
"match": {
"addCol": "test"
}
}
}
現在の設定「ダイナミック」:「偽」、問い合わせの新しいフィールド何もありません。
4.1。手動でマッピングを作成します
私たちの上に動的マッピング機能を導入しましたが、今私たちは、マッピングを作成する方法のマニュアルを作成したいです。私は以下のコードを見てください。
PUT student
{
"mappings":{
"properties": {
"firstName":{
"type":"text"
},
"lastName":{
"type":"text"
},
"password":{
"type":"text",
"index":false
}
}
}
}
PUT student/_doc/1
{
"firstName":"AA",
"lastName":"BB",
"password":"abc"
}
POST student/_search
{
"query": {
"match_phrase": {
"password": {
"query": "abc"
}
}
}
}
このフィールドは、転置インデックスを作成しませんES、数字の結果を見ることができるとき、偽:上記の例では、手動で作成する簡単な例であり、我々はインデックス指定された際に、各フィールドのタイプによって作成します。
4.2.Indexオプション
ES指数オプション設定の4つのレベルがあります。
- ドキュメント記録ドキュメントID
- freqs記録ドキュメントIDと用語頻度
- ドキュメントID及び位置を記録周波数用語および用語位置
- ドキュメントIDレコードオフセット及び周波数項及びオフセット項の位置と文字
テキストタイプのデフォルトの位置、その他のデフォルトのドキュメント
4.3.copy_to
copy_to 是为瞒足一些特定搜素需求,将多个字段 数值拷贝到目标字段,目标字段不会出现在 _source。在 ES7 中,copy_to 已经替代 copy_to。例如下面这个例子,把 firsetName 和 lastName 合并一起搜素。
PUT student_1
{
"mappings":{
"properties": {
"firstName":{
"type":"text",
"copy_to": "fullName"
},
"lastName":{
"type":"text",
"copy_to": "fullName"
},
"password":{
"type":"text",
"index":false
}
}
}
}
PUT student_1/_doc/1
{
"firstName":"AA",
"lastName":"BB",
"password":"abc"
}
Get student_1/_search?q=fullName:(AA BB)
5.小结
本篇主要对 Dynamic Mapping 以及手动创建 Mapping 进行讲解,Dynamic Mapping 有好处也有坏处,好处我们无需定义 Mapping,坏处是推算的类型不一定正确,这点要留意。如果手动创建 Mapping 比较推荐先用 Dynamic Mapping 创建生成一个临时索引,查询 Mapping 定义(标题3.2 下面的结果图)修改使用,这样可以减少工作量和出错的概率。
系列文章 【Elasticsearch 7 探索之路】(五)搜索相关 Search-API 【Elasticsearch 7 探索之路】(四)Analyzer 分析 【Elasticsearch 7 探索之路】(三)倒排索引 【Elasticsearch 7 探索之路】(二)文档的 CRUD 和批量操作 【Elasticsearch 7 搜索之路】(一)什么是 Elasticsearch?