文档章节

全文搜索引擎Elasticsearch之容器部署与使用

吴伟祥
 吴伟祥
发布于 2018/12/19 14:46
字数 969
阅读 28
收藏 3

具体请参考官方文档 ->  Elasticsearch Reference

一、什么是 Elasticsearch

Elasticsearch 是一个基于 Lucene 的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于 RESTful web 接口。Elasticsearch 是用 Java 开发的,并作为 Apache 许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。

二、Docker安装Elasticsearch

1、开发模式

可以使用以下命令快速启动Elasticsearch以进行开发或测试:

$ docker run -p 9200:9200 -p 9300:9300 -d --name es -e "discovery.type=single-node" docker.elastic.co/elasticsearch/elasticsearch:6.5.3
# 集成ik插件
$ docker run -p 9200:9200 -p 9300:9300 -d --name es -e "discovery.type=single-node" bachue/elasticsearch-ik:6.2.4

2、生产模式

vm.max_map_count内核设置需要至少设置为2 62144用于生产。根据您的平台:

  • Linux的

    vm.max_map_count设置应在/etc/sysctl.conf中永久设置:

    $ grep vm.max_map_count /etc/sysctl.conf
    vm.max_map_count=262144

    要在实时系统类型上应用该设置: sysctl -w vm.max_map_count=262144

3、安装成功后即可访问

三、可视化工具示例

1、ElasticHD 是一款 Elasticsearch的可视化应用(无需配置elasticsearch.yml

$ docker run -p 9800:9800 -d --link es --name elastichd containerize/elastichd

2、elasticsearch-head是elasticsearch的一个集群管理工具(需要配置elasticsearch.yml 该插件能直接对 Elasticsearch 的数据进行增删改查,因此存在安全性的问题。建议生产环境下不要使用该插件!

for Elasticsearch 5.x: docker run -d --name es-head -p 9100:9100 --link es docker.io/mobz/elasticsearch-head:5
# 安装es版本5 否则部分操作无法正常使用(无法新建索引等)
docker run -p 9200:9200 -p 9300:9300 -d --name es -e "discovery.type=single-node" elasticsearch:5

es默认不支持跨域访问的,所以需要重新配置:

Ⅰ、进入容器

docker exec -it es bash

Ⅱ、在elasticsearch.yml配置文件中加入一下内容,然后重启服务。

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

# 无法使用vi, 重定向方式完成
echo "http.cors.enabled: true" >> elasticsearch.yml
echo "http.cors.allow-origin: \"*\"" >> elasticsearch.yml

四、基本概念

Node与Cluster

单个 es 实例称为一个节点(node) ,   一组节点构成一个集群(cluster)。

Index

含有相同属性的文档集合 - > es会索引所有字段,经过处理后写入一个反向索引(Inverted Index)。查找数据的时候,直接查找该索引(必须小写)。

shards分片

每个索引都有多个分片,每个分片都是 Lucene 索引

replicas副本

拷贝一份分片就完成分片的副本

Type

索引可以定义一个或多个类型,文档必须属于一个类型

Document

Index 里面单条的记录称为 Document(文档)。许多条 Document 构成了一个 Index

Document 使用 JSON 格式表示,下面是一个例子。

{
  "user": "张三",
  "title": "工程师",
  "desc": "数据库管理"
}

同一个 Index 里面的 Document,不要求有相同的结构(scheme),但是最好保持相同,这样有利于提高搜索效率。

五、docker-compose 部署 elasticsearch 集群 

六、使用

Elasticsearch 支持 RESTFUL 风格 API,其 API 基本格式如下:

http://<ip>:<port>/<索引>/<类型>/<文档id>

5.1 创建索引

为了方便测试,我们使用 ARC工具进行接口的请求。

5.1.1 创建一个非结构化的索引,需要使用 PUT 请求。例如创建一个名为 book 的索引。

5.1.2 创建一个结构化的索引

5.2 删除索引

5.3 插入数据

5.3.1 指定id

5.3.2 不指定 ID ,需要使用 POST 请求

5.4 修改数据

修改数据,需要使用 POST 请求,且 URL 需要添加 _update

5.5 查找数据

条件查询,需要使用 POST 请求

 

© 著作权归作者所有

共有 人打赏支持
吴伟祥

吴伟祥

粉丝 12
博文 415
码字总数 274278
作品 0
泉州
后端工程师
私信 提问
Docker 简单部署 ElasticSearch

一、ElasticSearch是什么? Elasticsearch也使用Java开发并使用Lucene作为其核心来实现所有索引和搜索的功能,但是它的目的是通过简单的RESTful API来隐藏Lucene的复杂性,从而让全文搜索变得...

简玄冰
2018/08/02
0
0
初探 ELK - 每天5分钟玩转 Docker 容器技术(89)

在开源的日志管理方案中,最出名的莫过于 ELK 了。ELK 是三个软件的合称:Elasticsearch、Logstash、Kibana。 Elasticsearch 一个近乎实时查询的全文搜索引擎。Elasticsearch 的设计目标就是...

CloudMAN
2017/11/03
0
0
单机使用docker建立elasticsearch集群开发环境进行测试

单机使用docker建立elasticsearch集群开发环境进行测试 docker是什么 很小很轻可以只装一个一个应用的虚拟机,或者可以叫它容器 elasticsearch是什么 企业级全文搜索引擎 需求背景 长期在ela...

十五倍压枪
2018/05/22
0
0
Kubernetes-基于EFK进行统一的日志管理

1、统一日志管理的整体方案 通过应用和系统日志可以了解Kubernetes集群内所发生的事情,对于调试问题和监视集群活动来说日志非常有用。对于大部分的应用来说,都会具有某种日志机制。因此,大...

店家小二
2018/12/14
0
0
Kubernetes基于EFK进行统一的日志管理方案

1、统一日志管理的整体方案 通过应用和系统日志可以了解Kubernetes集群内所发生的事情,对于调试问题和监视集群活动来说日志非常有用。对于大部分的应用来说,都会具有某种日志机制。因此,大...

店家小二
2018/12/17
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Django进阶 1.1 ORM基础—ORM 1.2.1 增删改查之查询 1.2.2 删改增 (1) 1.2.3 删改增 (2)

ORM基础 ORM是Django操作数据库的API,Django的作者将sql语句封装在里面供我们使用。 我们前面还提到过Django提供一个模拟数据库的工具,sqlite,供我们学习测试使用。 如果我们想使用mysql...

隐匿的蚂蚁
今天
1
0
Windows 上安装 Scala

在安装 Scala 之前需要先安装 Java 环境,具体安装的详细方法就不在这里描述了。 您可以自行搜索我们网站中的内容获得其他网站的帮助来获得如何安装 Java 环境的方法。 接下来,我们可以从 ...

honeymose
今天
3
0
数据库篇多表操作

第1章 多表操作 实际开发中,一个项目通常需要很多张表才能完成。例如:一个商城项目就需要分类表(category)、商品表(products)、订单表(orders)等多张表。且这些表的数据之间存在一定的关系...

stars永恒
今天
3
0
nginx日志自动切割

1.日志配置(Nginx 日志) access.log----记录哪些用户,哪些页面以及用户浏览器,IP等访问信息;error.log------记录服务器错误的日志 #配置日志存储路径:location / {      a...

em_aaron
昨天
5
0
java 反射

基本概念 RTTI,即Run-Time Type Identification,运行时类型识别。RTTI能在运行时就能够自动识别每个编译时已知的类型。   要想理解反射的原理,首先要了解什么是类型信息。Java让我们在运...

细节探索者
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部