0%

Elasticsearch和分词插件

Elasticsearch

elasticsearch基本概念

  • 基本概念

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    索引(index)
    ⼀一个索引可以理理解成⼀一个关系型数据库。

    类型(type):
    ⼀一种type就像⼀一类表,⽐比如user表,order表。 注意:
    ES 5.x中⼀一个index可以有多种type。 ES 6.x中⼀一个index只能有⼀一种type。 ES 7.x以后已经移除type这个概念。

    映射(mapping):
    mapping定义了了每个字段的类型等信息。相当于关系型数据库中的表结构。

    字段(field):
    相当于关系型数据库表的字段

    集群(cluster):
    集群由⼀一个或多个节点组成,⼀一个集群有⼀一个默认名称"elasticsearch"。

    节点(node):
    集群的节点,⼀一台机器器或者⼀一个进程

    分⽚片和副本(shard):
    副本是分⽚片的副本。分⽚片有主分⽚片(primary Shard)和副本分⽚片(replica Shard)之分。 ⼀一个Index数据在物理理上被分布在多个主分⽚片中,每个主分⽚片只存放部分数据。 每个主分⽚片可以有多个副本,叫副本分⽚片,是主分⽚片的复制。

docker安装elasticsearch

  • docker镜像安装

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    创建docker共享网络elastic:
    docker network create elastic

    安装elasticsearch7.6.2版本
    docker pull docker.elastic.co/elasticsearch/elasticsearch:7.6.2
    docker run \
    -d \
    --name es7.6.2 \
    --net elastic \
    -p 9200:9200 \
    -e discovery.type=single-node \
    -e ES_JAVA_OPTS="-Xms256m -Xmx1024m"\
    -e xpack.security.enabled=false \
    -e cluster.routing.allocation.disk.threshold_enabled=false \
    -it \
    docker.elastic.co/elasticsearch/elasticsearch:7.6.2


    或者安装安装elasticsearch7.10.2版本
    docker pull docker.elastic.co/elasticsearch/elasticsearch:7.10.2
    docker run \
    -d \
    --name es7.10.2 \
    --net elastic \
    -p 9200:9200 \
    -e discovery.type=single-node \
    -e ES_JAVA_OPTS="-Xms256m -Xmx1024m"\
    -e xpack.security.enabled=false \
    -e cluster.routing.allocation.disk.threshold_enabled=false \
    -it \
    docker.elastic.co/elasticsearch/elasticsearch:7.10.2

hanlp分词插件启用hanlp_nlp分词必要的模型文件

  • 启用方式

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    1.根据analysis-hanlp插件中的README.txt文本提示:
    elasticsearch-7.6.2/plugins/analysis-hanlp/data/model/README.txt

    2.得知:
    模型文件需要另外下载,并不包含在源码中。原因:
    1、模型大多数不可读,自然不可修改
    2、体积非常大,动辄上百兆,超出GitHub的限制
    3、网络受限制,check out太耗时
    4、不是每个人都需要CRF分词、句法分析等功能
    如果你需要最新的模型文件,请访问 https://github.com/hankcs/HanLP/releases 下载对应版本的数据包。
    敬请注意数据包与jar包的版本,以免发生不兼容的问题。

    3.将下载好的data-for-1.7.5.zip解压,将里面data-for-1.7.5/data/model下的文件夹整体拷贝到elasticsearch-7.6.2/plugins/analysis-hanlp/data/model文件夹下,
    然后 重启elasticsearch服务,重新创建索引即可。
    注意:如果elasticsearch安装在docker中,拷贝到analysis-hanlp/data/model下的文件夹如果提示访问权限错误,
    可以执行:chmod -R 777 * 授予读写权限即可。


    注意:
    es docker容器中模型文件安装(将model下的文件复制到docker对应位置,在chmod -R 777 * 授权即可):
    docker cp <源路径> <目标容器名称或ID>:<目标路径>

    docker cp /Users/ux/Downloads/data-for-1.7.5/data/model 6b2ffdd98edd:/usr/share/elasticsearch/plugins/analysis-hanlp/data

相关docker命令

  • 网络组相关

    1
    2
    3
    4
    5
    6
    7
    8
    创建docker共享网络elastic:
    docker network create elastic

    #查看网络组:
    docker network ls

    #查看elastic网络组中的容器:
    docker network inspect elastic

mac解压版本elasticsearch

  • 下载及运行

    1
    2
    3
    4
    下载对应版本解压即可:https://www.elastic.co/cn/downloads/elasticsearch
    注意elasticsearch不同版本所要求的jdk环境要求。
    如果在linux或mac下提示权限问题,直接将bin目录下的所有文件授权即可:
    进入bin: chmod -R 777 *

ES自动创建索引相关

  • 开启自动创建索索引相关

    1
    2
    3
    4
    5
    6
    7
    8
    9
    postman上的接口:修改auto_create_index状态
    PUT请求:
    http://localhost:9200/_cluster/settings

    json请求体:
    {
    "persistent": {
    "action.auto_create_index": "true" }
    }

分词插件

hanlp分词插件安装

中文分词器插件一般有smartcn分词器、ik 分词器、安装hanlp分词器等。

一般来说,分词器版本要和es版本对应,具体的适配版本要看各个分词器的版本适配说明。

  • 安装hanlp分词插件(废弃,仅参考安装方式)

    1
    2
    该种方式安装github开源打包版本,停用词等配置无法生效,不建议使用。
    ./elasticsearch-plugin install https://github.com/KennFalcon/elasticsearch-analysis-hanlp/releases/download/v7.6.2/elasticsearch-analysis-hanlp-7.6.2.zip
  • 安装hanlp分词插件并默认启用hanlp停用词设置之-自己打包对应版本

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    1.github找到对应源码,切换到7.6.2的tag,拉取:
    https://github.com/KennFalcon/elasticsearch-analysis-hanlp.git

    2.源码打包方式为gradle,elasticsearch插件打包jdk版本要求为jdk13(本次使用oracle openjdk13.0.2),
    注意:jdk13设置为默认环境变量,否则可能出现无法打包。同时记得在idea设置中搜索gradle,设置gradle jvm,选择oracle openjdk13。参考截图:"gradle jvm设置.png"

    3.更改源码,默认启用停用词:
    搜索关键词enable_stop_dictionary、enable_custom_config,更改这两个配置变量默认值为:true

    4.在代码所在路径执行./gradlew assemble 命令重新打包(参见源码README.md)

    5.找到打包后的插件zip:
    elasticsearch-analysis-hanlp-7.6.2/build/distributions/elasticsearch-analysis-hanlp-7.6.2.zip

    6.安装自己打包后的插件elasticsearch-analysis-hanlp-7.6.2.zip
    安装方式一:
    本地磁盘安装(必须一file://开头):
    ./bin/elasticsearch-plugin install file:////Users/Downloads/elasticsearch-analysis-hanlp-1.0-SNAPSHOT.zip

    安装方式二:
    nginx服务器资源安装(nginx配置参考下面 "nginx静态资源发布"):
    ./bin/elasticsearch-plugin install http://192.168.1.100:8090/elasticsearch-analysis-hanlp-7.6.2.zip

    如果安装过程中出现:
    Continue with installation? [y/N] 提示,选y即可。

    注:如果直接将插件解压到elasticsearch的plugins目录下,则无法将插件里对应的config配置和配置文件放置到elasticsearch的conf目录下的正确位置。

    7.插件安装完后需要更改插件权限,进入elasticsearch的plugins目录下,执行:
    chmod -R 777 *

    8.卸载插件命令:
    sh ./bin/elasticsearch-plugin remove analysis-hanlp

    gradlejvm设置截图 ![](./Elasticsearch和分词插件/gradle jvm设置.png)

nginx静态资源发布

  • docker下安装nginx相关映射信息配置(仅供参考)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    docker run \
    --name nginx \
    -p 443:443 -p 80:80 -p 8090:8090 \
    -v /Users/ux/Applications/docker/nginx/logs:/var/log/nginx \
    -v /Users/ux/Applications/docker/nginx/html:/usr/share/nginx/html \
    -v /Users/ux/Applications/docker/nginx/nginx.conf:/etc/nginx/nginx.conf \
    -v /Users/ux/Applications/docker/nginx/conf:/etc/nginx/conf.d \
    -v /Users/ux/Applications/docker/nginx/ssl:/etc/nginx/ssl \
    -e TZ=Asia/Shanghai \
    --privileged=true -d \
    nginx
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    注释:

    非必须参数:
    --network=my-network \
    --network-alias=nginx-alias \
    --restart=always nginx

    目录释义:注意,时区很有必要

    logs:日志挂载目录
    html:静态文件挂载目录
    conf:配置挂载目录
    ssl:证书挂载目录
    network:非必须,要加入的网络
    network-alias:非必须,在网络中的别名
    TZ:时区
    privileged:让容器对挂载目录拥有读写等特权
  • 把自己打包的hanlp分词插件zip包放在/usr/share/nginx/html下,

    我本机映射的路径是/Users/ux/Applications/docker/nginx/html(我的nginx安装在docke,参见上面docker下安装nginx相关映射信息配置)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    #如有需要 gzip也放开即可
    #gzip on;

    #上传文件大小限制
    client_max_body_size 1024M;

    ignore_invalid_headers on;
    underscores_in_headers on;
    merge_slashes on;

    server {
    listen 8090;
    server_name 192.168.2.155;

    charset 'utf-8';
    #静态文件
    location / {
    root /usr/share/nginx/html;
    index index.html index.htm;
    }

    }

插件相关命令

  • 查看插件列表

    1
    2
    3
    4
    5
    在elasticsearch家目录执行命令-查看安装的插件列表
    ./bin/elasticsearch-plugin list

    或进入elasticsearch的bin目录,执行
    ./elasticsearch-plugin list
  • 安装插件

    1
    2
    3
    4
    5
    6
    7
    在elasticsearch家目录执行命令-安装插件
    ./bin/elasticsearch-plugin install 插件url

    或进入elasticsearch的bin目录,执行
    ./elasticsearch-plugin install 插件url

    如果直接将插件解压到elasticsearch的plugins目录下,则无法将插件里对应的config配置和配置文件放置到elasticsearch的conf目录下的正确位置。
  • 卸载插件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    在elasticsearch家目录执行命令-卸载插件
    ./bin/elasticsearch-plugin remove analysis-hanlp

    或进入elasticsearch的bin目录,执行
    ./elasticsearch-plugin remove analysis-hanlp

    analysis-hanlp即安装的插件名,可直接在elasticsearch的plugins目录下查看到。

    如:smartcn插件卸载卸载:
    sh ./elasticsearch-plugin remove analysis-smartcn

    安装 kibana 可视化(也可在edge浏览器安装“es-client”插件)

    • kibana

      1
      docker run --name kibana7.6.2 --net elastic -p 5601:5601 docker.elastic.co/kibana/kibana:7.6.2
    • es-client

      1
      edge浏览器插件市场直接安装即可

    参考:

https://blog.csdn.net/weixin_42171478/article/details/129078439
https://www.elastic.co/guide/en/kibana/current/docker.html

与sprngboot集成相关配置

  • 参考demo源码

    1
    2
    https://github.com/uxawseny/esdemo.git
    或对应文件夹的压缩包