美文网首页
Elasticsearch之路-1-初体验

Elasticsearch之路-1-初体验

作者: 灭BUG | 来源:发表于2018-06-30 17:26 被阅读15次

    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
    
    • 解压后,将elasticsearch-2.3.0移动到/usr/local目录下,然后进入elasticsearch-2.3.0文件夹
    $ mv elasticsearch /usr/local/
    $ mv cd elasticsearch-2.3.0/
    
    • 进入config目录,对elasticsearch.yml(可以跳过使用默认值)
    $ 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的问题

    • 进入bin目录,修改elasticsearch文件配置
    $ 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

    相关文章

      网友评论

          本文标题:Elasticsearch之路-1-初体验

          本文链接:https://www.haomeiwen.com/subject/lgltuftx.html