Elasticsearch安装及快速入门
本文最后更新于 1116 天前,其中的信息可能已经有所发展或是发生改变。

Elasticsearch安装及快速入门

Docker安装Elasticsearch

1.拉起镜像并创建对应的网络连接

拉起镜像

docker pull elasticsearch:7.16.2

创建网络连接,用来与其他容器服务进行通信,比如 Kibana

docker network create -d bridge elasticsearch_network

2.创建容器

配置挂载数据文件夹

# 创建配置文件目录
mkdir -p /data01/elasticsearch_data/config

# 创建插件文件目录
mkdir -p /data01/elasticsearch_data/plugins

# 创建数据目录
mkdir -p /data01/elasticsearch_data/data

# 将/mydata/elasticsearch/文件夹中文件都可读可写
chmod -R 775 /data01/elasticsearch_data

# 创建elasticsearch.yml文件
vi /data01/elasticsearch_data/config/elasticsearch.yml

# 添加到elasticsearch.yml文件下:
cluster.name: "docker-cluster"
network.host: 0.0.0.0
http.cors.enabled: true
http.cors.allow-origin: "*"
xpack.security.enabled: false # 关闭ElasticSearch 安全功能(正式生产环境需要打开该功能)

Elasticsearch目录介绍:

  • bin:脚本目录,包括:启动、停止等可执行脚本
  • config:配置文件目录
  • data:索引目录,存放索引文件的地方
  • logs:日志目录
  • modules:模块目录,包括了es的功能模块
  • plugins :插件目录,es支持插件机制

Elasticsearch-elasticsearch.yml常用配置:

cluster.name: 
    配置elasticsearch的集群名称,默认是elasticsearch。建议修改成一个有意义的名称。
node.name:
    节点名,通常一台物理服务器就是一个节点,es会默认随机指定一个名字,建议指定一个有意义的名称,方便管理
    一个或多个节点组成一个cluster集群,集群是一个逻辑的概念,节点是物理概念,后边章节会详细介绍。
path.conf: 
    设置配置文件的存储路径,tar或zip包安装默认在es根目录下的config文件夹,rpm安装默认在/etc/ elasticsearch
path.data:
    设置索引数据的存储路径,默认是es根目录下的data文件夹,可以设置多个存储路径,用逗号隔开。
path.logs:
    设置日志文件的存储路径,默认是es根目录下的logs文件夹
path.plugins: 
    设置插件的存放路径,默认是es根目录下的plugins文件夹
bootstrap.memory_lock: true
    设置为true可以锁住ES使用的内存,避免内存与swap分区交换数据。
network.host: 
    设置绑定主机的ip地址,设置为0.0.0.0表示绑定任何ip,允许外网访问,生产环境建议设置为具体的ip。
http.port: 9200
    设置对外服务的http端口,默认为9200。
transport.tcp.port: 9300  集群结点之间通信端口
node.master: 
    指定该节点是否有资格被选举成为master结点,默认是true,如果原来的master宕机会重新选举新的master。
node.data: 
    指定该节点是否存储索引数据,默认为true。
discovery.zen.ping.unicast.hosts: ["host1:port", "host2:port", "..."]
    设置集群中master节点的初始列表。
discovery.zen.ping.timeout: 3s
    设置ES自动发现节点连接超时的时间,默认为3秒,如果网络延迟高可设置大些。
discovery.zen.minimum_master_nodes:
    主结点数量的最少值 ,此值的公式为:(master_eligible_nodes / 2) + 1 ,比如:有3个符合要求的主结点,那么这里要设置为2。
node.max_local_storage_nodes: 
    单机允许的最大存储结点数,通常单机启动一个结点建议设置为1,开发环境如果单机启动多个节点可设置大于1。

运行容器

docker run --name elasticsearch -p 9200:9200 -p 9300:9300 \
-e  "discovery.type=single-node" \
-e ES_JAVA_OPTS="-Xms1g -Xmx1g" \
-v /data01/elasticsearch_data/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-v /data01/elasticsearch_data/plugins:/usr/share/elasticsearch/plugins \
--network elasticsearch_network \
-d elasticsearch:7.16.2 

-e "discovery.type=single-node" 设置为单节点

特别注意:

-e ES_JAVA_OPTS="-Xms1g -Xmx1g" 测试环境下,设置ES的初始内存和最大内存,否则导致过大启动不了ES

-v /data01/elasticsearch_data/plugins/:/usr/share/elasticsearch/plugins/配置这个就不用进入容器操作了 直接把ik分词器解压到这个目录

这样es就启动好了。我们可以去检查es是否安装完成,可以输入命令:curl http://localhost:9200

设置 Elasticsearch 随Docker启动(可选):docker update elasticsearch --restart=always

Docker安装可视化Kibana

1.拉起镜像并创建对应的网络连接

拉起镜像

docker pull kibana:7.16.2

2.创建容器

运行容器

docker run -d --name kibana \
--network elasticsearch_network \
-e "I18N_LOCALE=zh-CN" \
-e ELASTICSEARCH_HOSTS=http://192.168.31.101:9200 \
-p 5601:5601 \
kibana:7.16.2

-e ELASTICSEARCH_HOSTS=``http://192.168.163.131:9200: 这里要设置成自己的虚拟机IP地址

-e "I18N_LOCALE=zh-CN":这是设置中文

访问 http://localhost:5601 会进入 Kibana 控制台。

Elasticsearch快速入门

简单的集群管理

1.快速检查集群的健康状况

测试一下get方式查询集群状态

GET /_cluster/health

返回结果:

{
  "cluster_name" : "docker-cluster-elasticsearch",
  "status" : "yellow",
  "timed_out" : false,
  "number_of_nodes" : 1,
  "number_of_data_nodes" : 1,
  "active_primary_shards" : 10,
  "active_shards" : 10,
  "relocating_shards" : 0,
  "initializing_shards" : 0,
  "unassigned_shards" : 1,
  "delayed_unassigned_shards" : 0,
  "number_of_pending_tasks" : 0,
  "number_of_in_flight_fetch" : 0,
  "task_max_waiting_in_queue_millis" : 0,
  "active_shards_percent_as_number" : 90.9090909090909
}

集群的健康情况(status):green、yellow、red?

  • green:每个索引的primary shard和replica shard都是active状态的
  • yellow:每个索引的primary shard都是active状态的,但是部分replica shard不是active状态,处于不可用的状态
  • red:不是所有索引的primary shard都是active状态的,部分索引有数据丢失了

es也提供了一套api,叫做cat api,可以查看es中各种各样的数据

GET /_cat/health?v

2.快速查看集群中有哪些索引

GET /_cat/indices?v

文档(document)的数据格式

  1. 应用系统的数据结构都是面向对象的,具有复杂的数据结构
  2. 对象存储到数据库,需要将关联的复杂对象属性插到另一张表,查询时再拼接起来。
  3. es面向文档,文档中存储的数据结构,与对象一致。所以一个对象可以直接存成一个文档。
  4. es的document用json数据格式来表达。

文档 document CRUD操作

1.新建图书索引

首先建立图书索引 book

语法:PUT /index

PUT /book

2.新增图书 : 新增文档

语法:PUT /index/type/id

PUT /book/_doc/1
{
"name": "Bootstrap开发",
"description": "Bootstrap是由Twitter推出的一个前台页面开发css框架,是一个非常流行的开发框架,此框架集成了多种页面效果。此开发框架包含了大量的CSS、JS程序代码,可以帮助开发者(尤其是不擅长css页面开发的程序人员)轻松的实现一个css,不受浏览器限制的精美界面css效果。",
"studymodel": "201002",
"price":38.6,
"timestamp":"2021-12-28 16:11:35",
"pic":"group1/M00/00/00/wKhlQFs6RCeAY0pHAAJx5ZjNDEM428.jpg",
"tags": [ "bootstrap", "dev"]
}

PUT /book/_doc/2
{
"name": "java编程思想",
"description": "java语言是世界第一编程语言,在软件开发领域使用人数最多。",
"studymodel": "201001",
"price":68.6,
"timestamp":"2021-12-28 16:11:35",
"pic":"group1/M00/00/00/wKhlQFs6RCeAY0pHAAJx5ZjNDEM428.jpg",
"tags": [ "java", "dev"]
}

PUT /book/_doc/3
{
"name": "spring开发基础",
"description": "spring 在java领域非常流行,java程序员都在用。",
"studymodel": "201001",
"price":88.6,
"timestamp":"2021-12-28 16:11:35",
"pic":"group1/M00/00/00/wKhlQFs6RCeAY0pHAAJx5ZjNDEM428.jpg",
"tags": [ "spring", "java"]
}

3.查询图书: 检索文档

语法:GET /index/type/id

查看图书:

GET /book/_doc/1 就可看到json形式的文档。

4.修改图书:替换操作

PUT /book/_doc/1
{
    "name": "Bootstrap开发教程1",
    "description": "Bootstrap是由Twitter推出的一个前台页面开发css框架,是一个非常流行的开发框架,此框架集成了多种页面效果。此开发框架包含了大量的CSS、JS程序代码,可以帮助开发者(尤其是不擅长css页面开发的程序人员)轻松的实现一个css,不受浏览器限制的精美界面css效果。",
    "studymodel": "201002",
    "price":38.6,
    "timestamp":"2021-12-28 16:11:35",
    "pic":"group1/M00/00/00/wKhlQFs6RCeAY0pHAAJx5ZjNDEM428.jpg",
    "tags": [ "bootstrap", "开发"]
}

替换操作是整体覆盖,要带上所有信息。

5.修改图书:更新文档

语法:POST /{index}/_update/{id}

POST /book/_update/1/
{
  "doc": {
    "name":"update_name"
  }
}

-----返回结果-----
{
  "_index" : "book",
  "_type" : "_doc",
  "_id" : "1",
  "_version" : 2,
  "result" : "updated",
  "_shards" : {
    "total" : 2,
    "successful" : 1,
    "failed" : 0
  },
  "_seq_no" : 11,
  "_primary_term" : 2
}

6.删除图书:删除文档

语法:DELETE /{index}/type/{id}

如删除id=1的book:DELETE /book/_doc/1

文档document入门

默认自带字段解析

GET /book/_doc/2
{
  "_index" : "book",
  "_type" : "_doc",
  "_id" : "2",
  "_version" : 1,
  "_seq_no" : 1,
  "_primary_term" : 1,
  "found" : true,
  "_source" : {
    "name" : "java编程思想",
    "description" : "java语言是世界第一编程语言,在软件开发领域使用人数最多。",
    "studymodel" : "201001",
    "price" : 68.6,
    "timestamp" : "2021-09-17 16:11:35",
    "pic" : "group1/M00/00/00/wKhlQFs6RCeAY0pHAAJx5ZjNDEM428.jpg",
    "tags" : [
      "java",
      "dev"
    ]
  }
}

_index

  • 含义:此文档属于哪个索引
  • 原则:类似数据放在一个索引中。数据库中表的定义规则。如图书信息放在book索引中,员工信息放在employee索引中。各个索引存储和搜索时互不影响。
  • 定义规则:英文小写。尽量不要使用特殊字符。order user

_type

  • 含义:类别。book java node
  • 注意:以后的es9将彻底删除此字段,所以当前版本在不断弱化type。不需要关注。见到type都为_doc。

_id

含义:文档的唯一标识。就像表的id主键。结合索引可以标识和定义一个文档。

生成:手动(put /index/_doc/id)、自动

_source

含义:插入数据时的所有字段和值。在get获取数据时,在_source字段中原样返回。

定制返回字段

就像sql不要select *,而要select name,price from book …一样。

包含:GET /book/_doc/2?_source_includes=name,price

排除:GET /book/_doc/2?_source_excludes=name,price

_version

含义:版本号,不断上升

生成文档id

手动生成id

场景:数据从其他系统导入时,本身有唯一主键。如数据库中的图书、员工信息等。

用法:put /index/_doc/id

PUT /test_index/_doc/1
{
  "test_field": "test"
}

自动生成id

用法:POST /index/_doc

POST /test_index/_doc
{
  "test_field": "test1"
}

自动id特点:长度为20个字符,URL安全,base64编码,GUID,分布式生成不冲突

文档的替换与删除

1.全量替换

执行n次,返回结果中版本号(_version)就会n+1。此过程为全量替换。

2.强制创建

为防止覆盖原有数据,我们在新增时,设置为强制创建,不会覆盖原有文档。

3.删除(lazy delete)

实质:旧文档的内容不会立即删除,只是标记为deleted。适当的时机,集群会将这些文档删除。

4.局部替换(partial update)

使用 PUT /index/type/id 为文档全量替换,需要将文档所有数据提交。

partial update局部替换则只修改变动字段。

POST /book/_update/1/
{
  "doc": {
    "name":"update_name"
  }
}

优点:

  • 大大减少网络传输次数和流量,提升性能
  • 减少并发冲突发生的概率。
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇