Elasticsearch之路-1-初体验

2018-06-30  本文已影响15人  灭BUG

1. 前言

最近我参与开发的系统在做重构的工作,这个系统之前一直存在着一个问题(被用户吐槽了很久😂),用户负责的订单筛选排序查询慢数据同步慢(有时候得半小时才能同步订单数据)。我自己亲自在APP上体验了一下,确实很难受。分析了一下,造成这种问题的原因有两个:
1. 订单数据是从数据库从库中查询出来的。

  • 为什么要从从库查询呢?
    因为这部分用户只需要对订单进行跟单,也就是说没有写操作
  • 为什么从库的数据同步慢呢?

2. 查询订单的时候,负责的筛选条件以及排序条件导致表的索引难以命中。
基于以上原因:所以在重构的时候,架构师就给了建议,说可以考虑使用Elastisearch来解决复杂的筛选和排序条件造成订单查询慢的问题,同时数据同步的问题可以通过Kafka+Elasticsearch来解决。这个解决方案听起来还不错,但是在开始技术评审之前,我需要先做一下技术预演(就是做个DEMO),看看Elasticsearch是否可行,就这样我就开始慢慢地踩入ES的坑了。

补充一下:目前我们公司还没有一套现成的搜索引擎解决方案,要是有,我就不要踩这么多坑了😭,考虑到公司迟早会用到,所以就派我先行探路了。

2. 安装并启动

2.1 版本选择

由于重构的工作是基于新的工程,而新的工程使用的是SpringBoot1.5.X的版本,应该选择Elasticsearch小于5.0,大于2.0版本,参照下图:

Spring Data Elasticsearch版本选择
选择好版本后,可以到ES官网下载对应的版本 点击此处

我选择的是ES2.3.0版本

2.2 安装ES

image
$ tar -zxf elasticsearch-2.3.0.tar.gz
$ mv elasticsearch /usr/local/
$ mv cd elasticsearch-2.3.0/
$ cd config/
$ vim elasticsearch.yml
# 可以进行如下配置(不配置的话会有默认值)
cluster.name: rodde-es-application  # 设置集群的名称
node.name: node-1  # 设置集群中节点的名称(一个ES实例就是一个节点)
path.data: /path/to/data  # 设置数据存储的路径
path.logs: /path/to/logs  # 设置日志存储的路径
network.host: 0.0.0.0  # 设置ES绑定的IP,
http.port: 9200  # 设置HTTP的端口
transport.tcp.port: 9300  # 设置TCP通信端口

注:将network.host配置为0.0.0.0是为了解决ES启动后不能访问通过IP:9200的问题

$ cd ../bin/
$ vim elasticsearch
# 添加配置
ES_JAVA_OPTS="-Des.insecure.allow.root=true"

注:出于安全性考虑,root用户启动elasticsearch会报以下错误,需要添加上述配置

Exception in thread "main" Java.lang.RuntimeException: don't run elasticsearch as root.

2.3启动ES

Elasticsearch有两种启动方式:

$ ./elasticsearch  #启动后想要停止,直接ctrl+c即可
$ ./elasticsearch -d 
# 后台方式启动的话,想要停止ES,需要执行以下命令
$ ps aux | grep elastic  # 查询当前ES的进程
$ kill -9 16046  # 删除对应的进程号
示例

2.4 验证

在浏览器上访问http://{ip}:9200,看到如下返回的数据,即表示ES启动成功

{
  "name": "node-1",
  "cluster_name": "rodde-es-application",
  "version": {
    "number": "2.3.0",
    "build_hash": "8371be8d5fe5df7fb9c0516c474d77b9feddd888",
    "build_timestamp": "2016-03-29T07:54:48Z",
    "build_snapshot": false,
    "lucene_version": "5.5.0"
  },
  "tagline": "You Know, for Search"
}

3. 安装Head插件

Head插件是Elasticsearch的一个可视化管理插件,可以方便地查看,删除,管理数据

注:不要在生产环境安装Head插件,进入这个插件是不需要密码的,要是别人知道了你的IP,就可以进入head,删除索引然后跑路了!!

进入Elasticsearch根目录的bin文件加,通过plugin安装

$ cd bin/
$ ./plugin install mobz/elasticsearch-head
示例

安装成功后,使用浏览器访问

http://{ip}:9200/_plugin/head/

4. 安装IK 分词器

ES自带的中文分词器只能将文字分成一个一个词,比较烂,需要我们选择别的分词器来弥补这个缺陷

首先选择对应版本的IK分词器 点击这里

IK分词器版本对照

注:IK分词器的版本选择是精确到0.0.1的,举个例子

  • 我现在的ES版本为2.3.0,如果我选择了IK版本为1.9.5,安装的时候就会提示,版本不对了
  • 上面这幅图只是粗略地展示某些版本对应,如果你第一次安装了版本不对的IK分词器,错误信息会提示你应该下载那个本版的

选好对应的版本后,点击“Downloads”

这是ES2.3.0版本对应的IK分词器版本 点击红色标注的地方

注:你也可以选择Source code下载,但是下载后需要自己使用Maven编译,执行mvn package命令

将zip包上传到服务器的目录/user/local/elasticsearch-2.3.0,执行如下命令:

# 先创建文件夹"ik"
$ mkdir ik
# 将zip解压到指定的文件夹
$ unzip elasticsearch-analysis-ik-1.9.0.zip -d ik/
# 删除zip包
$ rm -rf elasticsearch-analysis-ik-1.9.0.zip

这样就将IK分词器装好了,安装完后,需要重启ES才能生效,重启后访问以下链接,验证IK分词器是否生效

http://{ip}:9200/_analyze?analyzer=ik&text=%27佛山市%27

注:你可以对比一下不使用IK分词器的效果,只要将analyzer从ik改为default

上一篇 下一篇

猜你喜欢

热点阅读