Elasticsearch中文搜索环境搭建

Elasticsearch是一个建立在全文搜索引擎 Apache Lucene™ 基础上的搜索引擎,功能强大,最近刚好要研究搜索这一块,简要记录备日后查阅

  1. 安装Java JDK,由于Lucene是用Java开发的,所以需要安装JVM

    • JAVA官网下载JDK安装包,注意,由于后面我们安装中文分词插件需要装maven,所以安装的必须是JDK包而不是JRE

    • 通过RPM -ivh 命令安装下好的安装包

    • 编辑配置文件,将安装好的java路径加入环境变量

        #vim /etc/profile
      

      在里面添加如下内容

       export JAVA_HOME=/usr/java/your_jdk_directory(修改成对应的路径)
        export JAVA_BIN=$JAVA_HOME/bin
        export PATH=$PATH:$JAVA_HOME/bin
        export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
        export JAVA_HOME JAVA_BIN PATH CLASSPATH
      

      使配置文件生效

        #source /etc/profile 或 #. /etc/profile  (也可关闭终端重新登陆)
      

      如果出现以下类似的输出,证明安装成功

        #java -version
        java version "1.8.0_66"
        Java(TM) SE Runtime Environment (build 1.8.0_66-b17)
        Java HotSpot(TM) 64-Bit Server VM (build 25.66-b17, mixed mode)
      
  2. 安装elasticsearch

    • elasticsearch官网下载elasticsearch安装包

    • 将安装包放于要安装的目录,解压

        $unzip elasticsearch-2.3.2.zip
      
    • 启动看是否成功,注意不能用root用户

        $bin/elasticsearch
      
  3. 安装Marvel管理插件(选装)

    • 先从Kibana下载界面下载Kibana

    • 解压kibana,并修改配置文件,将elasticsearch路径指向上一步elasticsearch的访问路径,默认为 http://localhost:9200

    • 安装Marvel

        $bin/plugin install license
        $bin/plugin install marvel-agent
        $bin/kibana —install elasticsearch/marvel/latest 
        $bin/elasticsearch  
        $bin/kibana     
      
  4. 安装中文分词插件elasticsearch-analysis-ik

    • 若未安装maven,需要先安装maven,可通过yum install maven, brew install maven等安装,也可下载源码解压后将bin目录加入PATH环境变量安装

    • github上下载elasticsearch-analysis-ik源码, 再通过maven打包,并将打好的包拷贝到plugins/ik目录下,解压

        $mvn package
        $cp target/releases/elasticsearch-analysis-ik-{version}.zip to your-es-root/plugins/ik
        $unzip target/releases/elasticsearch-analysis-ik-{version}.zip
        $bin/elasticsearch
      
    • 简单验证分词插件是否安装成功

      新建索引

        $curl -XPUT http://localhost:9200/index
      

      配置分词mapping

        $curl -XPOST http://localhost:9200/index/fulltext/_mapping -d'
        {
            "fulltext": {
                "_all": {
                    "analyzer": "ik_max_word",
                    "search_analyzer": "ik_max_word",
                    "term_vector": "no",
                    "store": "false"
                },
                "properties": {
                    "content": {
                        "type": "string",
                        "store": "no",
                        "term_vector": "with_positions_offsets",
                        "analyzer": "ik_max_word",
                        "search_analyzer": "ik_max_word",
                        "include_in_all": "true",
                        "boost": 8
                    }
                }
            }
        }'
      

      加入文档

        $curl -XPOST http://localhost:9200/index/fulltext/1 -d'{"content":"美国留给伊拉克的是个烂摊子吗"}'
        $curl -XPOST http://localhost:9200/index/fulltext/2 -d'{"content":"公安部:各地校车将享最高路权"}'
      

      搜索

        $curl -XPOST http://localhost:9200/index/fulltext/_search  -d'
        {
            "query" : { "term" : { "content" : "美国" }},
            "highlight" : {
                "pre_tags" : ["<tag1>", "<tag2>"],
                "post_tags" : ["</tag1>", "</tag2>"],
                "fields" : {
                    "content" : {}
                }
            }
        }'
      

      如果有搜索结果,证明中文分词插件已经安装成功

  5. 安装相应的客户端api,如golang客户端api

     go get gopkg.in/olivere/elastic.v3

推荐阅读更多精彩内容