Elasticsearch怎样实现自定义分词

此次采用在Docker下演示ik分词器和Nginx结合使用实现分词效果

  1. 首先,如果没有下Docker,可点击此处根据步骤下载Docker

  2. 下载完成后,我们要使用docker命令下载Elasticsearch

    mkdir -p /mydata/elasticsearch/config # 用来存放配置文件
    mkdir -p /mydata/elasticsearch/data  # 数据
    echo "http.host: 0.0.0.0" >/mydata/elasticsearch/config/elasticsearch.yml # 允许任何机器访问
    chmod -R 777 /mydata/elasticsearch/ ## 设置elasticsearch文件可读写权限
    // 以上文件用于外挂容器文件使用
    
    // 下载并启动容器
    docker run --name elasticsearch -p 9200:9200 -p 9300:9300 \
    -e  "discovery.type=single-node" \
    -e ES_JAVA_OPTS="-Xms64m -Xmx512m" \
    -v /mydata/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
    -v /mydata/elasticsearch/data:/usr/share/elasticsearch/data \
    -v  /mydata/elasticsearch/plugins:/usr/share/elasticsearch/plugins \
    -d elasticsearch:7.4.2 
    

    ES_JAVA_OPTS="-Xms64m -Xmx512m"此句是设置es所占用的内存大小,防止其占用内存过大。

  3. 接下来,我们根据Elasticsearch相应版本下载相应的ik分词器的版本:ik分词器的下载地址,之后,把下载的文件传输到/mydata/elasticsearch/plugins下,解压。

  4. 解压完成之后,我们可以使用 docker exec -it elasticsearch /bin/bash命令进入容器内部,之后使用命令 elasticsearch-plugin list如果返回ik(我的ik文件夹名称为ik)并且没有错误警告,如下图

    image-20220329164805575

  5. 此时我们的ik分词器安装完成了,接下来我们安装Nginx,随便启动一个 nginx 实例,只是为了复制出配置

    docker run -p80:80 --name nginx -d nginx:1.10  
    
  6. 进入自己创建的mydata文件夹,在此文件夹下执行如下命令

    docker container cp nginx:/etc/nginx .  // 将容器内的配置文件拷贝到当前目录 (注意后面有个小点)
    // 为了更好的管理nginx文件,我们可以做如下操作
    mv nginx conf // 改变文件夹的名字为conf
    docker stop nginx // 停止nginx
    docker rm nginx   // 删除nginx
    mkdir nginx       // 创建一个nginx文件夹
    mv conf nginx/    // 把conf文件夹移动到nginx下面
    
  7. 到这里,我们便可以重新启动一个Nginx

     docker run -p 80:80 --name nginx \
     -v /mydata/nginx/html:/usr/share/nginx/html \
     -v /mydata/nginx/logs:/var/log/nginx \
     -v /mydata/nginx/conf/:/etc/nginx \
     -d nginx:1.10
    
  8. 到这里我们,我们基本上算完成了配置,接下来,我们需要自定义我们的分词

    mkdir es // 为我们的es分词专门创建一个文件夹。路径:/mydata/nginx/html/es
    vim fenci.txt // 在es中创建文本,并写入内容,比如写入 “乔碧罗”,保存并退出
    
  9. 然后,我们把fenci.txt所在的路径修改保存到ik的IKAnalyzer.cfg.xml文件

    cd /mydata/elasticsearch/plugins/ik/config/ // 进入ik的config目录
    
  10. 执行命令 vim IKAnalyzer.cfg.xml,下面为IKAnalyzer.cfg.xml 中的代码,我们需要修改 增加我们自己的分词路径,其中http://192.168.220.128/es/fenci.txt,是本次演示配置的地址,ip地址为自己主机的地址(使用ifconfig查看自己的主机地址)

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
    <properties>
            <comment>IK Analyzer 扩展配置</comment>
            <!--用户可以在这里配置自己的扩展字典 -->
            <entry key="ext_dict"></entry>
             <!--用户可以在这里配置自己的扩展停止词字典-->
            <entry key="ext_stopwords"></entry>
            <!--用户可以在这里配置远程扩展字典 -->
             <entry key="remote_ext_dict">http://192.168.220.128/es/fenci.txt</entry>
            <!--用户可以在这里配置远程扩展停止词字典-->
            <!-- <entry key="remote_ext_stopwords">words_location</entry> -->
    </properties>
    ~                 
    
  11. 之后重启es,自定义分词便配置完成了

    docker restart elasticsearch`
    
  12. 使用kibana进行测试

    // 发送语句
    POST _analyze
    {
      "analyzer": "ik_smart",
      "text": "乔碧罗殿下"
    }
    // 结果
    {
      "tokens" : [
        {
          "token" : "乔碧罗",
          "start_offset" : 0,
          "end_offset" : 3,
          "type" : "CN_WORD",
          "position" : 0
        },
        {
          "token" : "殿下",
          "start_offset" : 3,
          "end_offset" : 5,
          "type" : "CN_WORD",
          "position" : 1
        }
      ]
    }
    
    

    如有错误之处,没有说明白之处,恳请大佬们给予指正

你可能感兴趣的:(elasticsearch)