一、简介


1.1 什么是Elasticsearch?

Elasticsearch是一个分布式的开源搜索和分析引擎, 适用于所有类型的数据,包括文本、数字、地理空间、结构化和啡结构化数据。ElasticsearchApache Lucene的基础上开发而成,由Elasticsearch N.V. (即现在的Elastic)于2010年首次发布。Elasticsearch 以其简单的REST风格API、分布式特性、速度和可扩展性而闻名,是Elastic Stack的核心组件: Elastic Stack是适用于数据采集、充实、存储、分析和可视化的一组开源工具。人们通常将Elastic Stack称为ELK Stack (代指ElasticsearchLogstashKibana),目前Elastic Stack包括一系列丰富的轻星型数据采集代理, 这些代理统称为Beats,可用来向Elasticsearch发送数据。

1.2 Elasticsearch 的用途

Elasticsearch在速度和可扩展性方面表现出色,能够索引多种类型的内容,意味着可以用于多种用例:

  • 应用程序搜索
  • 网站搜索
  • 企业搜索
  • 日志处理分析
  • 基础设施指标和容器检测
  • 应用程序性能检测
  • 地理空间数据分析和可视化
  • 安全分析
  • 业务分析

1.3 Elasticsearch 的工作原理

原始数据会从多个来源(包括日志、系统指标和网络应用程序)输入到 Elasticsearch 中。_数据采集_指在Elasticsearch中进行_索引_之前解析、标准化并充实这些原始数据的过程。这些数据在 Elasticsearch 中索引完成之后,用户便可针对他们的数据运行复杂的查询,并使用聚合来检索自身数据的复杂汇总。在 Kibana 中,用户可以基于自己的数据创建强大的可视化,分享仪表板,并对 Elastic Stack 进行管理。

1.4 Elasticsearch 索引是什么?

Elasticsearch 索引_指相互关联的文档集合。Elasticsearch 会以 JSON 文档的形式存储数据。每个文档都会在一组_键(字段或属性的名称)和它们对应的值(字符串、数字、布尔值、日期、_数值_组、地理位置或其他类型的数据)之间建立联系。

Elasticsearch 使用的是一种名为_倒排索引_的数据结构,这一结构的设计可以允许十分快速地进行全文本搜索。倒排索引会列出在所有文档中出现的每个特有词汇,并且可以找到包含每个词汇的全部文档。

在索引过程中,Elasticsearch 会存储文档并构建倒排索引,这样用户便可以近实时地对文档数据进行搜索。索引过程是在索引 API 中启动的,通过此 API 您既可向特定索引中添加 JSON 文档,也可更改特定索引中的 JSON 文档。

二、 基本概念


2.1 Index(索引)

动词: 相当于 MySQL 中的 insert

名词: 相当于 MySQL 中的 Database

2.2 Type(类型)

在 index (索引) 中,可以定义一个或多个类型,类似于 MySQL 中的 Table ,每一种类型的数据放在一起

把一条数据存在 ES 的某个索引的某个类型下,相当于 MySQL 的某个数据库的某张表下

2.3 Document (文档)

保存在某个 索引(数据库)下, 某种 类型(表) 的一个 Document 文档(一条数据), 文档是 JSON格式的,Document 就像是 MySQL 中的某个 Table 里面的内容。

三、在Docker环境中安装 ES + Kibana


3.1 下载镜像

docker pull elasticsearch:7.4.2

docker pull kibana:7.4.2

3.2 创建实例

3.2.1 elasticsearch

先在本机中创建一个自己的目录 , 如:/mydata/elasticsearch , 然后再目录底下创建三个文件夹 dataconfigplugins,为后面创建elasticsearch实例时,可以做一个文件映射,便于我们对 es 实例进行修改。

同时,在 config 文件夹里,新建 elasticsearch.yml 配置文件,并配置 es 可以被远程的任何机器进行访问

mkdir -p /mydata/elasticsearch/data

mkdir -p /mydata/elasticsearch/config

mkdir -p /mydata/elasticsearch/plugins

echo "http.host:0.0.0.0" >> /mydata/elasticsearch/config/elasticsearch.yml

启动 elasticsearch 实例

docker run --name elasticsearch -p 9200:9200 -p 9300:9300 \

-e "discovery.type=single-node" \

-e ES_JAVA_OPTS="-Xms64m -Xmx256m" \

-v /mydata/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \

-v /mydata/elasticsearch/data:/usr/share/elasticsearch/data \

-v /mydata/elasticsearch/plugins:/usr/share/elasticsearch/plugins \

-d elasticsearch:7.4.2

-e "discovery.type=single-node" : 设置 es 为单节点运行

-e ES_JAVA_OPTS="-Xms64m -Xmx256m": 设置 es 的最小内存使用 64M ,最大内存使用为 256 M

启动成功后,访问 http://主机IP:9200 ,能看到如下信息,即为创建成功

注: 如果启动失败,可以通过命令 docker logs elasticsearch 查看启动日志,可能出现的错误:

1、没有权限访问。因为我们启动的命令挂载到了外面, 所以可能存在无法访问的写入的权限

解决方案: 使用命令 chmod -R 777 /mydata/elasticsearch 给任何用户任何组所有权限,重启es实例即可。

3.2.2 kibana

kibana只需要创建实例,关联我们刚刚的es即可

docker run --name kibana -e ELASTICSEARCH_HOSTS=http://主机IP:9200 \

-p 5601:5601 -d kibana:7.4.2

上面的命令是根据官方文档查看而来的,不过这条命令在虚拟机中好像无法启动(我本地 [vmware 15.6 + centos7] 的环境下,一直无法启动成功,连接失败),而在阿里云ESC服务器上,可以成功启动,遇到上诉的情况,可以通过下面这条命令查看 es 实际暴露的 ip,把上面的主机 IP 修改为对应的 ip 即可

//007e为elasticsearch的id

docker inspect 007e 或者 docker inspect elasticsearch

则,kibana 创建的示例的命令为

docker run --name kibana -e ELASTICSEARCH_HOSTS=http://172.17.0.3:9200 \

-p 5601:5601 -d kibana:7.4.2

由于我们刚刚在执行前一个命令的时候,已经创建了一个名为 kibana 的实例,所以需要先删除后,在执行上一步的命令

// 查看所有运行中的实例

docker ps

// 查看所有的实例

docker ps -a

// 删除 kibana 的实例

docker rm kibana

访问 http://主机ip:5601 ,看到如下页面即为创建成功

可使用下面的两个命令,使得我们主机重启后,实例也会自动启动

docker update --restart=always elasticsearch

docker update --restart=always kibana

四、初步检索


4.1 _cat

4.1.1 查看节点信息

GET http://主机ip:9200/_cat/nodes

4.1.2 查看健康状况

GET http://主机ip:9200/_cat/health

4.1.3 查看主节点信息

GET http://主机ip:9200/_cat/master

4.1.4 查看所有的索引

GEThttp://主机ip:9200/_cat/indices

4.2 索引一个文档

MySQL:保存一条数据到表中

保存一个数据,保存在哪个索引的哪个类型下, 可以指定唯一标识

MySQL: 保存在哪个数据库的哪张表下

4.2.1 put带ID保存

新增更新二合一,第一次发送为新增,后面的则为更新。不指定id会报错,一般用做于修改

PUT /customer/external/1

{

"name": "John Doe"

}

4.2.2 POST保存

新增修改二合一,不带ID或者带ID但是之前没有数据为新增,带ID且之前有数据,为修改

PUT /customer/external/

{

"name": "John Doe"

}

4.3 查询文档

查询 哪个索引 下的 哪个类型 下的 哪条数据

MySQL: 查询哪个数据库下的哪张表的哪条数据

GET /customer/external/1

_seq_no:并发控制字段,每次更新就会 +1 ,可以用来做乐观锁

_primary_term:可用于做乐观锁,主分片重新分配,如重启,就会变化

乐观锁使用:

更新前,先查询出当前的数据,可以获取 当前 _seq_no 以及当前 _primary_term

更新的时候,带上 ?if_seq_no={当前 _seq_no }&if_primary_term={当前 _primary_term}

4.4 更新文档

4.4.1 POST 带 _update 更新

POST /customer/external/1/_update

{

# doc 的内容为文档的最新值

"doc": {

"name": "John Doew"

}

}

POST 带 _update 更新, 会对比原数据,如果更新的数据与原来一致,则 _version_seq_no不会变化, 且 result 的值为 noop,意思为没有做任何操作,且可以给原有的文档中,新增一个属性

{

# 带 _update doc不可省略, doc 的内容为文档的最新值

"doc": {

"name": "John Doew",

"age": 20

}

}

如上的请求也是可以成功的

4.4.2 其他更新

POST /customer/external/1

{

"name": "John Doew"

}

PUT /customer/external/1

{

"name": "John Doew"

}

以上两种方式的更新,永远为更新操作,不会对比原来的操作,每次请求 _version_seq_no都在不断叠加,且同 带 _updte 的 POST 请求一样,可以为原有文档新增上新的属性

4.5 删除文档&索引

发送 DELETE 请求, 需要指定到具体的文档、索引

DELETE /customer/external/1

DELETE /customer

在 ElasticSearch 中, 不提供删除类型的方法

4.6 bulk 批量 API

必须发送 POST 请求,在 PostMan 中无法模拟请求,这里需要用到 kibana

POST /customer/external/_bulkcustomer 索引下的 external 类型中批量执行

# 一个大括号代表一个操作,两行为一个动作

{"index":{"_id": "1"}} # 索引一个文档,文档的id为1

{"name": "John Doe"} # 文档的内容

{"index":{"_id": "2"}}

{"name": "John Doe"}

took :执行所花费的时间 errors : 是否有错误

items :独立统计每条命令的执行结果,如果中间有某条命令执行失败,后面的命令也不会受到影响,且命令执行失败的时候,不会跟MySQL一样,回滚

ElasticSearch 介绍、Docker安装以及基本检索第三篇的更多相关文章

  1. Elasticsearch介绍和安装与使用

    转载:https://blog.csdn.net/weixin_42633131/article/details/82902812 1.Elasticsearch介绍和安装 1.1.简介1.1.1.E ...

  2. Elasticsearch介绍和安装

    Elasticsearch介绍和安装 软件包: 链接:https://pan.baidu.com/s/1O_C0JQGfF8sC_OtcCCLNoQ 提取码:3iai 1.1.简介 1.1.1.Ela ...

  3. elasticsearch介绍,安装,安装错误解决及相应插件安装

    一.elasticsearch介绍 1.简介(使用的是nosql,更新比mongodb慢): ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎, ...

  4. Elasticsearch介绍及安装部署

    本节内容: Elasticsearch介绍 Elasticsearch集群安装部署 Elasticsearch优化 安装插件:中文分词器ik 一.Elasticsearch介绍 Elasticsear ...

  5. ElasticSearch介绍与安装

    什么是ES? 1基于Apache Lucene构建的开源搜索引擎 2采用java编写,提供简单易用的RESTFul API 3轻松的横向扩展,可支持PB级的结构化或非结构化数据处理 ES的应用场景? ...

  6. 【Elasticsearch】Docker 安装 Elasticsearch 2.4.4 版本(高版本方式不同)

    1. 下载  elasticsearch docker pull docker.elastic.co/elasticsearch/elasticsearch:6.4.3 2.启动 elasticsea ...

  7. Docker安装部署ELK教程(Elasticsearch+Kibana+Logstash+Filebeat)

    Elasticsearch 是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等. Logstash 是一个完全开 ...

  8. mac系统下docker安装配置mysql详细步骤

    上文介绍了MacOS安装Docker傻瓜式教程,安装好后第一件事就决定把本地数据库迁移过来,那么首先就得安装mysql,下面就开始我们的安装之旅吧. 一.docker配置镜像加速器 我们使用docke ...

  9. Docker安装指定版本

    今天新增一个Docker服务器,Docker安装顺利,启动hello-world测试的时候却出现了问题: $ docker run hello-worldUnable to find image 'h ...

随机推荐

  1. Github不为人知的一个功能,一个小彩蛋

    Github 是一个基于Git的代码托管平台,相信很多人都用过,当然这些"很多人"中大部分都是程序员.当你在Github上创建仓库时(Github称项目为仓库),你会给这个仓库添加 ...

  2. vue 过滤器 filter 的使用

    1.局部过滤器的使用 比如性别,订单状态的数据,后端一般返回数字来代替状态.以性别为模拟数据,0是未知,1是男,2是女. 直接数据渲染出来,只有012,没有性别 根据后端返回的int类型值,前端对数据 ...

  3. idea中maven的安装与配置

    说明:类似maven安装和配置的帖子在网上有很多,本人也有做过参照,但是有些帖子的步骤跳跃性比较大,故此,本人整理了一下,给大家做个参考. 一.下载安装 一般都是在官网进行下载 https://mav ...

  4. java对象

    原文链接http://zhhll.icu/2020/04/26/java%E5%9F%BA%E7%A1%80/%E9%9D%A2%E5%90%91%E5%AF%B9%E8%B1%A1/java%E5% ...

  5. linux脚本错误: line *: [: missing `]',linux编写shell脚本时的注意点

    转载:https://www.cnblogs.com/bovenson/p/4548079.html 关于shell的一些注意点,粘贴自拉钩教育精选评论:测试开发核心技术 46 讲-->第6讲 ...

  6. Windows下如何玩转火热的go-zero

    作者:阿啄debugIT 前言 go-zero 是一个集成了各种工程实践的 web 和 rpc 框架.通过弹性设计保障了大并发服务端的稳定性,经受了充分的实战检验. go-zero 包含极简的 API ...

  7. #2020征文-开发板# 用鸿蒙开发AI应用(五)HDF 驱动补光灯

    目录: 前言 硬件准备 HDF 驱动开发 总结 前言上一篇,我们在鸿蒙上运行了第一个程序,这一篇我们来编写一个驱动开启摄像头的红外补光灯,顺便熟悉一下鸿蒙上的 HDF 驱动开发. 硬件准备先查一下原理 ...

  8. (二)数据源处理2-xlrd操作excel

    import xlrd3workbook = xlrd3.open_workbook('test_data.xlsx')sheet =workbook.sheet_by_name('Sheet1')p ...

  9. 如何跑通第一个 SQL 作业

    简介: 本文由阿里巴巴技术专家周凯波(宝牛)分享,主要介绍如何跑通第一个SQL. 一.SQL的基本概念 1.SQL 分类 SQL分为四类,分别是数据查询语言(DQL).数据操纵语言(DML).数据定义 ...

  10. 【RAC】双节点RAC搭建

    本文主要是双节点的RAC进行搭建,根据黄伟老师的视频进行总结和使用. 搭建环境: 1.两台安装好Linux_x64系统的服务器 2.IP设置 注意:Priv-IP的IP是自己一个网段,而剩下的SCAN ...