elasticsearch实现中文分词+远程自定义词库(nginx)

中文分词

elasticsearch本身自带的中文分词,就是单纯把中文一个字一个字的分开,根本没有词汇的概念。但是实际应用中,用户都是以词汇为条件,进行查询匹配的,如果能够把文章以词汇为单位切分开,那么与用户的查询条件能够更贴切的匹配上,查询速度也更加快速。

分词器下载网址:https://github.com/medcl/elasticsearch-analysis-ik

 

 安装

下载好的zip包,请解压后放到 /usr/share/elasticsearch/plugins/ik(可以不叫ik但是必须再此目录下,且不能出现其他的文件)

然后重启es

基于中文分词搭建索引

  PS:添加了中文分词的词库之后,以后的type就不能使用默认的mapping了,默认的中文分词是一字一词的

       注意下面的name用的是中文分词

PUT movie_chn
{
  "mappings": {
    "movie_type_chn":{
      "properties": {
        "id":{
          "type": "long"
        },
        "name":{
          "type": "text"
          , "analyzer": "ik_smart"
        },
        "doubanScore":{
          "type": "double"
        },
        "actorList":{
          "properties": {
            "id":{
              "type":"long"
            },
            "name":{
              "type":"keyword"
            }
          }
        }
      }
    }
  }
}

为什么要用远程词库?

    过滤一些不能够出现的词语,以及一些流行词语。

实现方式:同将远程词库放在Nginx中当静态资源使用,这样添加的词语不用重启两个服务都就可以直接使用,

   需要的配置:

修改/usr/share/elasticsearch/plugins/ik/config/中的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://192.168.67.163/fenci/myword.txt</entry>
        <!--用户可以在这里配置远程扩展停止词字典-->
        <!-- <entry key="remote_ext_stopwords">words_location</entry> -->
</properties>

 修改

/usr/local/nginx/conf
中的nginx.conf

按照路径利用nginx发布静态资源
在nginx.conf中配置
  server {
        listen  80;
        server_name  192.168.232.128;
        location /fenci/ {
           root es;
    }
   }

并且在/usr/local/nginx/下建/es/fenci/目录,目录下加myword.txt

myword.txt中编写关键词,每一行代表一个词。

访问成功

 

自定义分词成功

发布了126 篇原创文章 · 获赞 6 · 访问量 3753

猜你喜欢

转载自blog.csdn.net/qq_40244391/article/details/103463595