将数据插入到Elasticsearch(7.9.1)中

512px-Elasticsearch_logo.svg (3).png

首先

在本文中,将作为上一篇文章的续篇,我们将讲解如何使用Kibana Dev-Tools和Bash这两种方法在Elasticsearch中进行Mapping和数据投入。

请你在中文中对以下句子进行改写,只需要一个选项:

参考

    • Elasticsearch公式

Mapping
Field data types
Removal of mapping types

はじめての Elasticsearch
Elasticsearchからtypeが無くなる
Elasticsearch 6 を利用する前に把握しておいた方がよさそうなこと

为什么写了这篇文章?

pose_zasetsu.png

内容索引

    • 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"
}
コメント 2020-09-16 1223338.png

数据输入

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
}

コメント 2020-09-16 1223738.png

一个选择的方式是: 投入后的结果。

确认数据投入的结果

请输入命令
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"
        }
      }
    ]
  }
}
コメント 2020-09-16 1223233738.png

答:7. 总结

我已经在Bash和Dev-Tools中解释了如何进行Elasticsearch的Mapping和数据插入,这比想象中要简单。
我本来是Bash派的,但在写这篇文章的过程中,被Dev-Tools的优秀之处所吸引了…
如果有使用Dev-Tools的环境,积极尝试一下也许是个不错的选择。

下一次

下一篇文章我想用Python来介绍如何在Elasticsearch中进行Mapping和数据投入。

广告
将在 10 秒后关闭
bannerAds