原来Elasticsearch 这样玩

原来Elasticsearch 这样玩

写在前面

本篇使用到的Elasticsearch和 Kabana 的版本为7.3.1,Elasticsearch 和Kabana的版本必须保持一致才可用。

一 windows环境下安装相关软件

1.安装Elasticsearch

1>首先下载Elasticsearch压缩包 ,下载地址:https://www.elastic.co/cn/downloads/past-releases#elasticsearch
2>解压后如下图,在bin下 双击 elasticsearch.bat
在这里插入图片描述
3>在命令行输出日志中 看到 started 证明已启动成功
在这里插入图片描述
4>.启动成功后打开浏览器 ,输入 http://localhost:9200/,打开如下页面 ,证明 Elasticsearch已安装完成。
在这里插入图片描述

2.安装kibana

1>首先下载Elasticsearch压缩包 ,下载地址:https://www.elastic.co/cn/downloads/past-releases#kibana
2>下载解压后,如下图 ,进入bin文件夹 ,双击 kibana.bat
在这里插入图片描述
3>当弹出登录地址时,证明已启动完成
在这里插入图片描述

4>在 Kibana 启动后,可以在浏览器的地址栏输入:http://localhost:5601/,就可以看到 Kibana 的首页
这时我们发现 界面是英文的,我们找到 安装目录下 config\kibana.yml ,找到 i18n.locale: “en” 去掉前面的 # ,并修改为 i18n.locale: “zh-CN”
重启后发现界面已变成中文

3.安装 Head 插件

1>下载zip文件,然后解压缩。 下载地址 https://github.com/mobz/elasticsearch-head/
2> 新增打开一个新的cmd窗口(按快捷键“Win+R”,输入“cmd”),并进入 Head 文件夹下
安装完成之后,执行命令:npm run startgrunt server,启动head插件(启动命令也是 cmd 在 Head 文件夹下执行)。
3>在 Windows 环境下,如果直接打开 Head 插件首页,则在浏览器的开发者模式下可以看到跨域的报错,因此需要对 Elasticsearch 跨域请求访问进行配置。
配置是通过修改 Elasticsearch 使用的配置文件:D:\elasticsearch-7.11.1\config\elasticsearch.yml 文件。
在 elasticsearch.yml 配置文件中,添加如下配置:
#增加新的参数,这样 Head 插件可以访问 Elasticsearch

http.cors.enabled: true 
http.cors.allow-origin: "*"

访问 Head 插件界面
修改完配置后,重启 Elasticsearch 服务,可以在浏览器的地址栏输入:http://localhost:9100/ ,这时看到安装kabana的三个默认索引
在这里插入图片描述
最后用简单的话总结下三个软件的关系 ,Elasticsearch 是搜索服务器,可以存储和搜索大数据,而 kibana 相当于客户端,可在浏览器页面查看和操作Elasticsearch,同样的elasticsearch-head 也是用于监控 Elasticsearch 状态的客户端插件,包括数据可视化、执行增删改查操作等。

二 基本概念和数据类型

1.基本概念

index(索引) :相当于mysql中的数据库
type(类型):相当于mysql中的一张表
document(文档): 相当于mysql中的一行(一条记录)
field(域): 相当于mysql中的一列(一个字段)
节点: 一个服务器,由一个名字来标识
集群: 一个或多个节点组织在一起
分片: 将一份数据划分为多小份的能力,允许水平分割和扩展容量。多个分片可以响应请求,提高性能和吞吐量。
副本:复制数据,一个节点出问题时,其余节点可以顶上。

2.字段类型 如下表

在这里插入图片描述

三 Elasticsearch的基本操作

提前说明:我们对Elasticsearch进行操作,有很多方式,如在命令行中用CURL命令,在Kabana的dev_tools操作,或者用 elasticsearch-head 操作。我们这里先用Kabana的dev_tools操作,其他的后面补充,只是执行方式不同,结果是相同的。

1.创建索引

number_of_shards 分片数、 number_of_replicas副本数 、mappings 写字段映射

PUT job
{
  "settings": {
    "number_of_shards": 2,
    "number_of_replicas": 1
  },
  "mappings": {
    "properties": {
      "name": {
        "type": "text"
      },
      "age": {
        "type": "integer"
      },
      "sex": {
        "type": "keyword"
      }
    }
  }
}

执行结果如下:
在这里插入图片描述

2.查看索引
GET job

在这里插入图片描述
我们也可以使用 GET job/mappings 查看具体某个属性的值 ,这里不知道为什么要前面加个下换线,待探索
在这里插入图片描述

3.修改索引信息
PUT job/_settings
{
  "number_of_replicas":10
}

在这里插入图片描述

4.修改索引 mapping 字段类型
PUT job1
{
  "settings": {
    "number_of_shards": 2,
    "number_of_replicas": 1
  },
  "mappings": {
    "properties": {
      "name": {
        "type": "keyword"
      },
      "age": {
        "type": "integer"
      },
      "sex": {
        "type": "keyword"
      }
    }
  }
}

同步数据

  POST _reindex
    {
      "source": {
        "index": "job"
      },
      "dest": {
        "index": "job1"
      }
    }

删除原索引

DELETE job

设置别名

   POST /_aliases
      {
            "actions": [
                {"add": {"index": "job1", "alias": "job"}}
            ]
      }
5.映射

在创建索引时,我们可以预先设定映射,规定好各个字段及其数据类型,便于es更好地进行管理。上面例子中我们创建索引时 指定了mapping,当我们在创建索引存入数据时,如果不指定类型,es会自动根据实际数据为其添加类型。
在这里插入图片描述
查看映射结果,我们看到已经自动分配了类型
在这里插入图片描述
注意: 创建索引和映射后,插入文档时,字段会自动转换成映射中规定的类型。比如,插入"123"到integer字段,会自动尝试对字符串进行类型转换。如果无法转换,则会报错,无法插入。

6.文档

一个“文档”即所谓的一条记录。可对文档进行增删改操作。
这里需要注意一点,在 7.0 以及之后的版本中 Type 被废弃了。一个 index 中只有一个默认的 type,即 _doc。
ES 的Type 被废弃后,库表合一,Index 既可以被认为对应 MySQL 的 Database,也可以认为对应 table。

1>插入文档

因此我们在之前建的job1索引中插入文档的语句如下:

POST job1/_doc
{
  "name":"zjb",
  "age":18,
  "sex":"男"
}

上面的例子中,我们插入文档没有指定文档ID,系统会自动分配,通过 GET job1/_search 查看所有数据,找到对应的ID

2>修改文档

一种是通过PUT的全覆盖方式,旧数据将被删除,以新的代替。

PUT job1/_doc/61Fv0YABBIqKDx5R3xzk
{
  "name":"zjb",
  "age":22,
  "sex":"男"
}
3>删除文档

通过DELETE方式可删除文档:

DELETE job1/_doc/61Fv0YABBIqKDx5R3xzk
4>mget取回多个文档

为了验证多个文档的取回,我们再插入1个文档

POST job1/_doc
{
  "name":"qgh",
  "age":18,
  "sex":"男"
}

取回命令如下:

GET _mget
{
   "docs" : [
      {
         "_index" : "job1",
         "_type" :  "_doc",
         "_id" :    "61Fv0YABBIqKDx5R3xzk"
      },
      {
         "_index" : "job1",
         "_type" :  "_doc",
         "_id" :    "7FF80YABBIqKDx5RXBwH",
         "_source": "name"
      }
   ]
}

第二个我只取回了name
在这里插入图片描述
以上index和type都相同,可以简写查找两个id,可以写作:

GET job/_doc/_mget
{
  "ids":["61Fv0YABBIqKDx5R3xzk", "7FF80YABBIqKDx5RXBwH"]
    
  }
}
5>bulk批量操作

bulk API 允许在单个步骤中进行多次 create 、 index 、 update 或 delete 请求。
bulk批量操作的请求比较特殊,格式为:

{ action: { metadata }}n
{ request body }n
{ action: { metadata }}n
{ request body }n ...

一般两行为一条请求,第一行说明操作和元数据,第二行是操作数据。不过delete请求只有一行。
bulk对JSON串的有着严格的要求。每个JSON串不能换行,只能放在同一行,同时,相邻的JSON串之间必须要有换行(Linux下是\n;Window下是\r\n)。bulk的每个操作必须要一对JSON串(delete语法除外)。
操作类型如下:
create 如果文档不存在就创建,但如果文档存在就返回错误
index 如果文档不存在就创建,如果文档存在就更新
update 更新一个文档,如果文档不存在就返回错误
delete 删除一个文档,如果要删除的文档id不存在,就返回错误

下面写个示例代码如下:

POST _bulk
{ "delete": { "_index": "job1", "_type": "_doc", "_id": "7FF80YABBIqKDx5RXBwH" }} 
{ "create": { "_index": "job1", "_type": "_doc", "_id": "1" }}
{ "name":    "sdd" }
{ "index":  { "_index": "job1", "_type": "_doc" }}
{ "name":    "gtr" }
{ "update": { "_index": "job1", "_type": "_doc", "_id": "61Fv0YABBIqKDx5R3xzk"} }
{ "doc" : {"age" : 30} }

执行结果如下:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值