前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Elasticsearch | 笔记

Elasticsearch | 笔记

作者头像
yiyun
发布2022-04-01 16:59:42
8290
发布2022-04-01 16:59:42
举报
文章被收录于专栏:yiyun 的专栏

引言

Docker Compose 启动 ES, Kibana

参考:

单节点

1.创建挂载的目录

代码语言:javascript
复制
mkdir -p mydata/elasticsearch/config

mkdir -p mydata/elasticsearch/data

2.准备挂载的配置文件

代码语言:javascript
复制
mydata/elasticsearch/config/elasticsearch.yml
mydata/kibana/config/kibana.yml

补充:

其实在 官方Docker es 镜像的配置文件 ( elasticsearch.yml ),就是下方内容:

代码语言:javascript
复制
cluster.name: "docker-cluster"
network.host: 0.0.0.0
  • elasticsearch.yml: 挂载的配置文件,
  • data: 挂载的数据,
  • plugins: es的插件,如ik,

而数据挂载需要权限,需要设置 data 文件的权限为可读可写,需要下边的指令。

代码语言:javascript
复制
chmod -R 777 <要修改的路径>

所需映射的文件 data 及 logs 目录 用户所有者为elasticsearch 所在组root, 而 docker 挂载到本机的目录所有者是 root 所在组 root,容器内部想写文件则会权限不足

如果在 docker-compose.yml 中解决权限问题,则使用:

代码语言:javascript
复制
environment:
  - TAKE_FILE_OWNERSHIP=true

discovery.type=single-node 设置为单节点 特别注意: ES_JAVA_OPTS="-Xms256m -Xmx256m" 测试环境下,设置ES的初始内存和最大内存,否则导致过大启动不了ES docker-compose.yml

代码语言:javascript
复制
version: '3.4'


services:
  es.service:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.13.2
    container_name: es-container
    ports:
      - "9200:9200"
      - "9300:9300"
    restart: always
    environment:
      - TZ=Asia/Shanghai
      - discovery.type=single-node
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
      #- TAKE_FILE_OWNERSHIP=true
    volumes:
      - "./mydata/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml"
      - "./mydata/elasticsearch/data:/usr/share/elasticsearch/data"
      - "./mydata/elasticsearch/plugins:/usr/share/elasticsearch/plugins"
    networks:
      - es-net

  kibana.service:
    image: docker.elastic.co/kibana/kibana:7.13.2
    container_name: kibana-container
    ports:
      - "5601:5601"
    restart: always
    depends_on:
      - es.service
    environment:
      - TZ=Asia/Shanghai
      - ELASTICSEARCH_HOSTS=http://es-container:9200
    volumes:
      - "./mydata/kibana/config/kibana.yml:/usr/share/kibana/config/kibana.yml"
    networks:
      - es-net

networks:
  es-net:
    driver: bridge

注意:

代码语言:javascript
复制
ELASTICSEARCH_HOSTS=http://es-container:9200

不是 http://127.0.0.1:9200 ,因为是两个容器通信,已经设置在同一网络,然而对于其中一个容器而言,ip并不是 127.0.0.1,Docker容器默认使用 container-name 映射到自己容器的ip,所以可以这么写

注意: 在 docker-compose.yml 中, volumes 中 宿主机使用相对路径时,必须以 ./ 开头,表示当前路径,不能用 data/eee 这样来表示相对路径, 但直接运行 docker run 时就可以这样写相对路径

启动

代码语言:javascript
复制
docker-compose up -d

测试

es

http://127.0.0.1:9200

kibana

http://127.0.0.1:5601

索引与映射

Elasticsearch 索引

在 Elasticsearch 中, 添加或更新文档时 最重要的动作: 将它们编入 倒排索引,未被编入倒排索引的 文档将不能被检索。 也就是说,Elasticsearch 中所有数据的检索都必须要通过倒排索引来检索,离开了 倒排索引文档就相当于不存在。 所以从检索的角度来看,文档以倒排索引的形式表现其存在性。 正是基 于这个原因,Elasticsearch 没有引入库的概念, 而是将文档的容器直接称为索引(Index)。而这里的索引就是倒排索引,或者更准确的说是一组倒排索引。 概念上: 将索引理解为文档在物理上的区分

​ 在概念上可以将索引理解为文档在物理上的区分。同一索引中的文档具有相同的索引策略,或者说 它们被编入到同一组索引中。从检索的角度来说,用户在检索文档时也要指定从哪一个索引中检索文 档。所以从存储和检索两个角度来看,以素引区分文档实在是再合适不过了。用户预先创建索引可以指明文档存储时怎么分词,如何创建索引等重要配置信息,这对于替身检索速度显然是有益的。

Elasticsearch 映射

在 Elasticsearch 中, 数据存储和检索的基本单元时文档。 Elasticsearch 的文档使用 JSON 格式, 所以 Elasticsearch 存储的文档是一种 半结构化数据,可以 预先定义好属性和数据类型

文档字段

文档字段可以分为两类:一类是元字段(Meta- field),另一类是用户定义的业务字段。

字段数据类型

Elasticsearch 支持的数据类型包括字符串、数值、日期、布尔、二进制、范围等核心数据类型, 还支持数组、对象等衍生类型,也支持嵌套、关联、地理信息等特殊类型。 衍生类型和特殊类型基本都是从核心类型派生而来

字符串类型

字符串类型包括 text 和 keyword 两种类型,两者的区别在于 text 类型在存储前会做词项分析, 而 keyword 类型则不会。所以 text 类型的字段可以通过 analyzer 参数设置该字段的分析器, 而 keyword 类型字段则没有这个参数。

数值类型

数值类型对应一个具体的数字值,例如1024、3.14等。 Elasticsearch 支持包括整型、浮点类型在内 的8种数值类型,它们的主要区别体现的数值精确度上,具体见表。

日期类型

Elasticsearch 有两种日期类型,分别是 date 和 date_nanos。

布尔类型

字节类型

范围类型

数组

对象

与数组类似,Elasticsearch 中没有定义 object 这种数据类型,它是在添加文档时使用 "{ }" 的格式 来确认字段类型为对象。

多数据类型

集群信息

集群健康

集群健康(Cluster Health)通过如下 api GET _cluster/health 可以查看集群健康状况,包括以下 三种:

  • green :健康状态,指所有主副分片都正常分配
  • yellow :指所有主分片都正常分配,但是有副本分片未正常分配
  • red :有主分片未分配

分片与复制

分片与集群

解决大数据存储的通用方案称为分片(Shard), 它的核心思想是将数据分解成大小合适的片段, 然后再将它们存储到集群中不同的节点上。 ElasticSearch 引入分片概念,主要是为了解决数据扩容的问题。 每一个分片仅存储部分数据,并不 是完整的数据。 分片数在索引创建时指定且后不允许再更改,7.x 版本开始,分片数默认为 1 个。 分片 有主分片和副本分片之分,以实现数据的高可用。 副本分片的数据由主分片同步,可以有多个,从而提高读取的吞吐量。

Q&A

补充

docker-compose up 无法启动 es-container

代码语言:javascript
复制
Unhandled exception: Filesharing has been cancelled

解决:

设置 Docker ,应用并重启

参考:

权限不足

权限不足,容器无权写入宿主机 data 目录,解决,es-container 添加环境变量

docker-compose.yml

代码语言:javascript
复制
environment:
  - TAKE_FILE_OWNERSHIP=true

注意: 实际在 Windows 中的 Docker 没有使用这个还是成功了,没有报 Java 访问文件权限不够 错误

参考:

Error: Could not find or load main class "-Xms64m

代码语言:javascript
复制
❯ docker-compose logs
Attaching to kibana-container, es-container
es-container      | Error: Could not find or load main class "-Xms64m
es-container      | Caused by: java.lang.ClassNotFoundException: "-Xms64m
es-container      | Exception in thread "main" java.lang.RuntimeException: starting java failed with [1]
es-container      | output:
es-container      |
es-container      | error:
es-container      | Error: Could not find or load main class "-Xms64m
es-container      | Caused by: java.lang.ClassNotFoundException: "-Xms64m
es-container      |     at org.elasticsearch.tools.launchers.JvmOption.flagsFinal(JvmOption.java:119)
es-container      |     at org.elasticsearch.tools.launchers.JvmOption.findFinalOptions(JvmOption.java:81)
es-container      |     at org.elasticsearch.tools.launchers.JvmErgonomics.choose(JvmErgonomics.java:38)
es-container      |     at org.elasticsearch.tools.launchers.JvmOptionsParser.jvmOptions(JvmOptionsParser.java:135)
es-container      |     at org.elasticsearch.tools.launchers.JvmOptionsParser.main(JvmOptionsParser.java:86)
es-container      | Error: Could not find or load main class "-Xms64m
es-container      | Caused by: java.lang.ClassNotFoundException: "-Xms64m
es-container      | Exception in thread "main" java.lang.RuntimeException: starting java failed with [1]
es-container      | output:

解决:

代码语言:javascript
复制
environment:
  - TZ=Asia/Shanghai
  - discovery.type=single-node
  #- ES_JAVA_OPTS="-Xms64m -Xmx128m" # 错误
  - "ES_JAVA_OPTS=-Xms512m -Xmx512m" # 正确

参考

感谢帮助!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-06-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 引言
  • Docker Compose 启动 ES, Kibana
    • 单节点
      • 启动
        • 测试
        • 索引与映射
          • Elasticsearch 索引
            • Elasticsearch 映射
            • 文档字段
            • 字段数据类型
              • 字符串类型
                • 数值类型
                  • 日期类型
                    • 布尔类型
                      • 字节类型
                        • 范围类型
                          • 数组
                            • 对象
                              • 多数据类型
                              • 集群信息
                                • 集群健康
                                • 分片与复制
                                  • 分片与集群
                                  • Q&A
                                  • 补充
                                    • docker-compose up 无法启动 es-container
                                      • 权限不足
                                        • Error: Could not find or load main class "-Xms64m
                                        • 参考
                                        相关产品与服务
                                        Elasticsearch Service
                                        腾讯云 Elasticsearch Service(ES)是云端全托管海量数据检索分析服务,拥有高性能自研内核,集成X-Pack。ES 支持通过自治索引、存算分离、集群巡检等特性轻松管理集群,也支持免运维、自动弹性、按需使用的 Serverless 模式。使用 ES 您可以高效构建信息检索、日志分析、运维监控等服务,它独特的向量检索还可助您构建基于语义、图像的AI深度应用。
                                        领券
                                        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档