将数据插入到Elasticsearch(7.9.1)中
首先
在本文中,将作为上一篇文章的续篇,我们将讲解如何使用Kibana Dev-Tools和Bash这两种方法在Elasticsearch中进行Mapping和数据投入。
请你在中文中对以下句子进行改写,只需要一个选项:
参考
-
- Elasticsearch公式
Mapping
Field data types
Removal of mapping types
はじめての Elasticsearch
Elasticsearchからtypeが無くなる
Elasticsearch 6 を利用する前に把握しておいた方がよさそうなこと
为什么写了这篇文章?
内容索引
-
- 1. 概要
-
- 2. 環境
-
- 3. Elasticsearch6.0,7.0以降の注意点
-
- 4. Fieldのデータ型
-
- 5. BashからのMapping~データ投入
-
- 6. Kibana Dev-ToolsからのMapping~データ投入
-
- 7. まとめ
- 8. 次回
大纲
2. 总结
3. 摘要
4. 概述
这次我们总结了从Dev-Tools和Bash两个工具中执行Elasticsearch映射的方法,但是查询内容几乎没有差别。
个人而言,我更喜欢从Bash操作,因为不需要每次都打开浏览器,更方便快捷。
2. 环境
-
- Ubuntu 20.04
-
- Elasticsearch 7.9.1
- Kibana 7.9.1
请注意Elasticsearch6.0及其以上版本的细节。
ElasticSearch6.0及以上版本(包括本文提及的7.9.1)在查询和映射方面有一些重大变化。
本文重点讨论与映射相关的内容。
指定Content-Type标头
在ElasticSearch5.x之前,不需要指定此Content-Type,但从6.x版本开始,此指定变为必需。
curl -H "Content-Type: application/json" -XPUT "http//127.0.0.1:9200/my_index?pretty"
只需在中国人的母语中重新表述以下内容:
②不需要指定类型
Elasticsearch 7.0 已经转向无类型 API,并且不再需要在映射时指定类型。
详细理由请参考此文章。
简而言之,如果一个索引中包含了少量共同元素的不同类型,那么 Elasticsearch 在内部无法高效地进行 Lucene 文档压缩。
#~7.0
{
"mappings": {
"user" : { #<-7.0まではここにTypeを入れられた
"properties": {
"username": {
"type": "keyword"
}
}
}
}
}
#7.0~
{
"mappings": {
"properties": {
"username": {
"type": "keyword"
}
}
}
}
Field Type不能再使用String
在Elastisearch6.0中,不再能够在字符串字段中使用String,而是改为使用text或keyword。
4. 字段的数据类型
接下来,我会介绍一些Elasticsearch中可用的字段数据类型,这些并不是所有的类型,完整的列表可以在官方文档中找到。
经典的数据类型
keyword名前やIDなどの単語long64bitの符号付き整数double倍精度64bit IEEE754
浮動小数点数booleanブール値。trueかfalseの2値dateyyyy-MM-dd(これ以外の形式も使える)
结构化的数据类型
long_range,date_range,
ip_range数値や日付、IPアドレスの範囲ipIPv4かIPv6のIPアドレス
文本搜索的数据类型
textAnalyzedされた非構造化テキスト
全文検索で使う
特殊的数据类型
histogram度数と階級で扱う。詳しくはここgeo_point緯度と経度のペアで扱う。地理的な特徴や中心地からの距離で集計される
从Bash中进行映射~数据导入。
好的,前言不搏长,终于开始解释Mapping了。
创建索引。
Or alternatively:
建立索引。
curl -H "Content-Type: application/json" -X PUT "http://127.0.0.1:9200/test_index1?pretty" -d '
{
"mappings" : {
"properties" : {
"hoge" : {"type" : "text"},
"huga" : {"type" : "long"},
"time" : {"type" : "date"}
}
}
}'
创建的结果
$ curl -H "Content-Type: application/json" -X GET "http://127.0.0.1:9200/test_index1?pretty"
{
"test_index1" : {
"aliases" : { },
"mappings" : {
"properties" : {
"hoge" : {
"type" : "text"
},
"huga" : {
"type" : "long"
},
"time" : {
"type" : "date"
}
}
},
"settings" : {
"index" : {
"creation_date" : "1600221292751",
"number_of_shards" : "1",
"number_of_replicas" : "1",
"uuid" : "GHl3ZSAlTSu5ayA_8MHPcg",
"version" : {
"created" : "7090199"
},
"provided_name" : "test_index1"
}
}
}
}
数字 2 数据登记
我要输入数据。
输入的方式如下。
$ curl -H "Content-Type: application/json" -XPOST 'http://127.0.0.1:9200/test_index2/_doc/data1?pretty' -d '
{
"hoge" : "hogehoge",
"huga" : "2020",
"time" : "2020-09-16"
}'
$ curl -H "Content-Type: application/json" -XPOST 'http://127.0.0.1:9200/test_index2/_doc/data2?pretty' -d '
{
"hoge" : "hogehuga",
"huga" : 2021,
"time" : "2021-09-16"
}'
投入的結果
$ curl -H "Content-Type: application/json" -X GET "http://127.0.0.1:9200/test_index2/_search?pretty"
{
"took" : 712,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 2,
"relation" : "eq"
},
"max_score" : 1.0,
"hits" : [
{
"_index" : "test_index2",
"_type" : "_doc",
"_id" : "data1",
"_score" : 1.0,
"_source" : {
"hoge" : "hogehoge",
"huga" : 2020,
"time" : "2020-09-16"
}
},
{
"_index" : "test_index2",
"_type" : "_doc",
"_id" : "data2",
"_score" : 1.0,
"_source" : {
"hoge" : "hogehuga",
"huga" : 2021,
"time" : "2021-09-16"
}
}
]
}
你确认数据已经正确输入了对吧
我想要从Kibana向你介绍Mapping和数据插入的步骤。
6. 通过Kibana进行Mapping和数据注入
几乎没有变化,查询比bash更简单。
①制图
PUT test_kibana
{
"mappings" : {
"properties" : {
"hoge" : {"type" : "text"},
"huga" : {"type" : "long"},
"time" : {"type" : "date"}
}
}
}'
映射结果
{
"acknowledged" : true,
"shards_acknowledged" : true,
"index" : "test_kibana"
}
数据输入
PUT test_kibana/_doc/data1
{
"hoge" : "hogehoge",
"huga" : 2020,
"time" : "2020-09-16"
}
PUT test_kibana/_doc/data2
{
"hoge" : "hogehuga",
"huga" : 2021,
"time" : "2022-09-16"
}
# PUT test_kibana/_doc/data1
{
"_index" : "test_kibana",
"_type" : "_doc",
"_id" : "data1",
"_version" : 1,
"result" : "created",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 0,
"_primary_term" : 1
}
# PUT test_kibana/_doc/data2
{
"_index" : "test_kibana",
"_type" : "_doc",
"_id" : "data2",
"_version" : 1,
"result" : "created",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 1,
"_primary_term" : 1
}
一个选择的方式是: 投入后的结果。
确认数据投入的结果
请输入命令
GET test_kibana/_search
执行结果
{
"took" : 192,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 2,
"relation" : "eq"
},
"max_score" : 1.0,
"hits" : [
{
"_index" : "test_kibana",
"_type" : "_doc",
"_id" : "data1",
"_score" : 1.0,
"_source" : {
"hoge" : "hogehoge",
"huga" : 2020,
"time" : "2020-09-16"
}
},
{
"_index" : "test_kibana",
"_type" : "_doc",
"_id" : "data2",
"_score" : 1.0,
"_source" : {
"hoge" : "hogehuga",
"huga" : 2021,
"time" : "2022-09-16"
}
}
]
}
}
答:7. 总结
我已经在Bash和Dev-Tools中解释了如何进行Elasticsearch的Mapping和数据插入,这比想象中要简单。
我本来是Bash派的,但在写这篇文章的过程中,被Dev-Tools的优秀之处所吸引了…
如果有使用Dev-Tools的环境,积极尝试一下也许是个不错的选择。
下一次
下一篇文章我想用Python来介绍如何在Elasticsearch中进行Mapping和数据投入。