大数据求索(10): 解决ElasticSearch中文搜索无结果------ik分词器的安装与使用

大数据求索(10): 解决ElasticSearch中文搜索无结果-----IK中文分词器的安装与使用

问题所在

在中文情况下,ES默认分词器会将汉字切分为一个一个的汉字,所以当搜索词语的时候,会发现无法找到结果。

解决办法

有很多其他的分词器插件可以替代,这里使用最常用的IK分词器。

IK分词器安装

注意:

ik分词器必须和ES版本严格对应,否则可能会产生意料之外的错误。

Github地址:https://github.com/medcl/elasticsearch-analysis-ik

可以直接下载releases下面的源码,使用maven进行编译。

把下载的elasticsearch-analysis-ik.zip解压

进入elasticsearch-analysis-ik-master/ 下,打包。

mvn clean package

打包后的文件在elasticsearch-analysis-ik-master/target/relearses目录下,名称类似如下,是一个zip文件。

elasticsearch-analysis-ik-5.6.2.zip

在/home/hadoop/cluster/elasticsearch/plugins创建ik文件夹,并将打包后的zip文件解压到此文件夹下,此时ik目录下一般有如下几个文件

commons-codec-1.9.jar    config                              httpclient-4.5.2.jar     plugin-descriptor.properties
commons-logging-1.2.jar  elasticsearch-analysis-ik-5.6.2.jar  httpcore-4.4.4.jar

此时,重启ES即可。

IK分词器的使用

使用IK分词器,由于认识较浅,只找到一种方法,就是改变ES中index的mapping。此外,由于mapping一旦创建就无法修改,所以,只能重新创建一个新的index,里面没数据 ,并设置mapping。java代码举例如下:

/**
     * 重新生成mapping,使用ik分词器
     * @throws Exception
     */
    @Test
    public void setMapping() throws Exception {
   
        TransportClient client = getClient();

        // 设置mapping,使用ik分词器
        // 没有数据之前才能成功,如果已经有mapping,则无法重新创建
        XContentBuilder builder = XContentFactory.jsonBuilder()
                .startObject()
                .startObject("article")
                .startObject("properties")
                .startObject("title").field("type", "text").field("store"
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值