一、关于Elasticsearch
的认识
-
1、什么是
Elasticsearch
ElasticSearch
是一个基于Lucene
的搜索服务器。它提供了一个分布式多用户能力的全文搜索 引擎,基于RESTful web
接口。Elasticsearch
是用Java
开发的,并作为Apache
许可条款下的 开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索。稳 定,可靠,快速,安装使用方便。简单概括:
ElasticSearch
是一个数据库,一个基于Restful
接口型的数据库,有点类似mysql
这样的数据库,更确切的来说是类似mongodb
文档型数据库 -
2、几种搜索数据的方式
- 直接使用
mysql
的LIKE
进行模糊查询(不建议使用) - 使用数据库的全文本搜索(搜索速度慢)
- 使用
ElasticSearch
- 直接使用
二、关于ElasticSearch
中的几个概念
-
集群(
cluster
)表示一个集群,集群中多个节点,其中一个节点是主节点,这个节点是通过选举产生的(主从节点是对于集群内部来说的)。
ElasticSearch
的一个概念是去中心化,字面上理解为无中心节点,这是对于集群外部来说的,因为从外部来看ElasticSearch
集 群,在逻辑上是个整体,你与任何一个节点的通信和与整个es
集群通信是等价的。 -
索引(
index
)索引我们可以简单的理解为数据库,在
ElasticSearch
中可以创建一个或者多个索引(index
)。我们可以向索引写入文档或者从索引中读取文档(可以比喻为我们可以向数据库中插入数据和读取数据) -
文档(
document
)文档可以简单的理解为数据库中的数据表,这个是
ElasticSearch
最终操作的实体 -
映射(
mapping
)素有文档写进索引之前都会先进行分析,如何将输入的文本分隔为词条、哪些词条又会被过滤,这种行为叫做映射
-
类型(
type
)每个文档都有与之对应的类型,这允许用户在一个索引中存储多中文档类型,并未不同文档提供类型,提供不同的映射
-
分片(
shards
)代表索引分片,
ElasticSearch
可以把一个完整的索引分成多个分片,这样的好处是可以把一个 大的索引拆分成多个,分布到不同的节点上。构成分布式搜索。分片的数量只能在索 引创建前指定,并且索引创建后不能更改
三、docker
安装Elasticsearch
-
1、直接安装最新版的镜像
docker pull elasticsearch
-
2、启动镜像
docker run --name elasticsearch -d -e ES_JAVA_OPTS="-Xms512m -Xmx512m" -e "discovery.type=single-node" -p 9200:9200 -p 9300:9300 elasticsearch
-
3、浏览器上输入测试是否启动容器成功
http://localhost:9200
{ name: "N9kE1aI", cluster_name: "elasticsearch", cluster_uuid: "4B0Z7qa2QjSbsRB1JMTZzw", version: { number: "5.6.12", build_hash: "cfe3d9f", build_date: "2018-09-10T20:12:43.732Z", build_snapshot: false, lucene_version: "6.6.1" }, tagline: "You Know, for Search" }
-
4、处理跨域的问题
# 进入容器中 docker exec -it [容器ID] /bin/bash # 进入目录下 cd config # 写入文件 echo 'http.cors.allow-origin: "*"' >> elasticsearch.yml echo "http.cors.enabled: true" >> elasticsearch.yml # 查看文件内容 cat elasticsearch.yml # 退出容器 exit
-
5、重启容器
docker restart [容器ID]
四、安装中文分词插件
-
1、官网地址
-
2、下载地址
-
3、将下载的文件拷贝到
docker
容器中docker cp [目录]/elasticsearch-analysis-ik-7.11.2.zip 容器ID:/usr/share/elasticsearch/plugins
-
4、进入容器中
-
5、在
/usr/share/elasticsearch/plugins/
目录下创建一个文件夹ik
,并且将刚刚拷贝的分词软件移动到ik
目录下# 创建文件 mkdir ik # 移动文件 mv elasticsearch-analysis-ik-7.11.2.zip ik
-
6、解压文件和删除文件
unzip elasticsearch-analysis-ik-7.11.2.zip # 删除压缩包 rm -rf elasticsearch-analysis-ik-7.11.2.zip
-
7、退出容器并且重启(注意这里可能会出错误)
-
8、如果出错误了,那么就是在分词插件中配置的版本与
docker
安装的elasticsearch
不一致,需要修改一致-
查看
elasticsearch
版本# 查看已经安装elasticsearch的版本 docker image inspect elasticsearch:latest | grep -i version
"JAVA_VERSION=8u181", "JAVA_DEBIAN_VERSION=8u181-b13-1~deb9u1", "CA_CERTIFICATES_JAVA_VERSION=20170531+nmu1", "GOSU_VERSION=1.10", "ELASTICSEARCH_VERSION=5.6.12", "ELASTICSEARCH_DEB_VERSION=5.6.12" "DockerVersion": "17.06.2-ce", "JAVA_VERSION=8u181", "JAVA_DEBIAN_VERSION=8u181-b13-1~deb9u1", "CA_CERTIFICATES_JAVA_VERSION=20170531+nmu1", "GOSU_VERSION=1.10", "ELASTICSEARCH_VERSION=5.6.12", "ELASTICSEARCH_DEB_VERSION=5.6.12"
-
安装
vim
编辑器apt-get update apt-get install vim
-
进入
elasticsearch
中修改插件的对应的版本# 编辑文件 vim plugin-descriptor.properties # 修改版本与之对应 elasticsearch.version=5.6.12
-
重启容器
-
-
9、或者你先查看你下载的中文分词插件的版本,然后去下载对应的
ElasticSearch
的版本
五、安装客户端可视化工具
-
1、使用
docker
安装mobz/elasticsearch-head
docker pull mobz/elasticsearch-head:5
-
2、启动容器
docker run -d -p 9100:9100 docker.io/mobz/elasticsearch-head:5
-
3、浏览器查看会自动连接到
Elasticsearch
http://localhost:9100/
-
4、创建索引
六、创建索引异常处理
-
1、当你点击创建索引,提交没任何反应的时候,你就打开浏览器控制台查看下
-
2、进入
mobz/elasticsearch-head
容器中修改代码docker exec -it 容器ID /bin/bash
-
3、修改文件
/usr/src/app/_site/vendor.js
# 更新软件包 apt-get update # 安装vim apt-get install vim
-
4、修改代码一(看好行号)
# 将代码 contentType: "application/x-www-form-urlencoded # 修改为 contentType: "application/json;charset=UTF-8"
-
5、修改代码而(看好行号)
# 将代码 var inspectData = s.contentType === "application/x-www-form-urlencoded" && # 修改为 var inspectData = s.contentType === "application/json;charset=UTF-8" &&
-
6、重启容器
docker restart 容器ID