asp.net core系列 75 Elasticsearch与中文分词配置

houhow 2020-02-18

一. elasticsearch on windows

1.下载地址:

  https://www.elastic.co/cn/downloads/elasticsearch

  如果浏览器下载文件慢,建议使用迅雷下载,速度很快。下载版本为7.5.2

2. 修改配置文件

  下载后解压,找到config\jvm.options,分配JVM堆内存大小,原则上是分配总内存的50%给 elasticsearch,但不要超过30.5GB,原因是64位寻址会导致性能下降。将默认1g改成512m,  个人电脑当默认1g时,windows安装会出现:HeapDumpOnOutOfMemoryError

  asp.net core系列 75 Elasticsearch与中文分词配置

  3. windows安装

   打开cmd执行以下命令

   E:\elasticsearch-7.5.2\bin>elasticsearch-service.bat install

 4.启动服务

  由于elasticsearch比较耗内存,默认安装服务设置启动方式为手动,除非真的使用windwos作为服务器, 手动启动服务后,浏览器查看:http://localhost:9200/,出现以下代表成功

   asp.net core系列 75 Elasticsearch与中文分词配置

  name:为集群中的节点名称,默认值为当前机器名称。

  cluster_name:集群的名称,默认为elasticsearch。

    查看健康状态:http://localhost:9200/_cat/health?v

  查看所有索引:http://localhost:9200/_cat/indices?v

5. 其它配置

  elasticsearch.yml文件

    transport.port :节点与节点通信的端口,默认为9300

    http.port:elasticsearch 开放的Rest接口的端口,默认为9200

    network.host 默认为192.168.0.1,要设置为0.0.0.0,绑定所有本地地址,或者直接设置一个可供外网访问的地址

二. Kibana on windows

1.下载地址

  https://www.elastic.co/cn/downloads/kibana

  如果浏览器下载文件慢,建议使用迅雷下载,速度很快。下载版本为7.5.2 

2.修改配置文件

  在config\kibana.yml文件中,默认连接elasticsearch地址是:elasticsearch.hosts: ["http://localhost:9200"], 如果elasticsearch和kibana都在同一台机器,则不需要修改。

3. 启动

  Kibana不同于Elasticsearch,Kibana官方并没有提供安装为系统服务的方法。在bin目录下双击kibana.bat文件。暂用控制台作为宿主。在浏览器运行http://localhost:5601/

  首页右下角单击,左边的导航栏会展开,如下所示:

  asp.net core系列 75 Elasticsearch与中文分词配置

  可以将sample flight data 飞行记录数据和sample web logs  web日志记录,这二个样例数据导入,方便学习。

asp.net core系列 75 Elasticsearch与中文分词配置

     在左边的导航栏Dev Tools 中,可以调用 elasticsearch api 来进行操作,如下所示:

asp.net core系列 75 Elasticsearch与中文分词配置

4.kibana其它配置

  4.1 kibana.yml修改为中文

    #i18n.locale: "en"
        i18n.locale: "zh-CN"

 三.分析器安装

IK 是中文分析器中比较有名的,分词包括两种: ik_smart和ik_max_word。二种区别在于提取词项的粒度,前者提取的粒度最粗,后者最细。elsaticsearch默认并不支持ik,需要安装。版本与elsaticsearch保持一致,这里下载v7.5.2。下载 地址:https://github.com/medcl/elasticsearch-analysis-ik/releases    elasticsearch-analysis-ik-7.5.2.zip

在plugins下,新建一个ik文件夹,解压放入,重启ES,如下所示:

asp.net core系列 75 Elasticsearch与中文分词配置

(打开kibana的Dev Tools测试)IK中文分析器测试,ik_max_word测试如下:

asp.net core系列 75 Elasticsearch与中文分词配置

 IK中文分析器测试,ik_smart测试如下:

asp.net core系列 75 Elasticsearch与中文分词配置

四.IK扩展词典

3.1 本地配置自定义词典

   如下图,先建一个txt文件,文本格式为 UTF8 编码,重命名为mydict.dic文件,添加自定义词典

asp.net core系列 75 Elasticsearch与中文分词配置

  将dic新文件路径配置到IKAnalyzer.cfg.xml中,如下所示:

<?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">custom/mydict.dic</entry>
     <!--用户可以在这里配置自己的扩展停止词字典-->
    <entry key="ext_stopwords"></entry>
    <!--用户可以在这里配置远程扩展字典 -->
    <!-- <entry key="remote_ext_dict">words_location</entry> -->
    <!--用户可以在这里配置远程扩展停止词字典-->
    <!-- <entry key="remote_ext_stopwords">words_location</entry> -->
</properties>

  置后,重启es服务,再使用分词器测试如下所示:

  asp.net core系列 75 Elasticsearch与中文分词配置

五.IK热更新词库

  官方给出建议:可以将需自动更新的热词放在一个 UTF-8 编码的 .txt 文件里,放在 nginx 或其他简易 http server 下,当 .txt 文件修改时,http server 会在客户端请求该文件时自动返回相应的 Last-Modified 和 ETag。可以另外做一个工具来从业务系统提取相关词汇,并更新这个 .txt 文件。

  下面使用iis作为http服务器,新建一个站点,站点下有一个hotword.txt 文件,应用池托管为v 4.0经典模式。去掉压缩不然lk程序监视器读取不到。 再就是设置http响应头,因为该 http 请求需要返回两个头部(header),一个是 Last-Modified,一个是 ETag,这两者都是字符串类型,只要有一个发生变化,该插件就会去抓取新的分词进而更新词库。配图如下所示:

asp.net core系列 75 Elasticsearch与中文分词配置

   将服务器txt文件路径配置到IKAnalyzer.cfg.xml中,如下所示:

<?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://localhost:8088/hotword.txt</entry> 
    <!--用户可以在这里配置远程扩展停止词字典-->
  <!--  <entry key="remote_ext_stopwords"></entry>-->
</properties>

hotword.txt配置如下所示:
asp.net core系列 75 Elasticsearch与中文分词配置

  重启es服务器,在Log/elasticsearch.log中可以看到加载的词列表,如下所示:

[2020-02-18T10:46:47,129][INFO ][o.w.a.d.Monitor          ] [DESKTOP-D49T1S2] try load config from D:\有啦\elasticsearch-7.5.2\plugins\ik\config\IKAnalyzer.cfg.xml
[2020-02-18T10:46:47,206][INFO ][o.w.a.d.Monitor          ] [DESKTOP-D49T1S2] [Dict Loading] http://localhost:8088/hotword.txt
[2020-02-18T10:46:47,213][INFO ][o.w.a.d.Monitor          ] [DESKTOP-D49T1S2] 新冠
[2020-02-18T10:46:47,213][INFO ][o.w.a.d.Monitor          ] [DESKTOP-D49T1S2] 新冠肺炎
[2020-02-18T10:46:47,213][INFO ][o.w.a.d.Monitor          ] [DESKTOP-D49T1S2] 盛吉芳
[2020-02-18T10:46:47,213][INFO ][o.w.a.d.Monitor          ] [DESKTOP-D49T1S2] 首提
[2020-02-18T10:46:47,214][INFO ][o.w.a.d.Monitor          ] [DESKTOP-D49T1S2] 哈哈
[2020-02-18T10:46:47,214][INFO ][o.w.a.d.Monitor          ] [DESKTOP-D49T1S2] reload ik dict finished.

 测试分词,如下所示:

asp.net core系列 75 Elasticsearch与中文分词配置

参考文献

analysis-ik

相关推荐