zoukankan      html  css  js  c++  java
  • ElasticSearch安装分词插件IK

    ElasticSearch本身带有分词插件,对英文支持的很好,但对中文支持的就不好了,把中文都分成了单个文字

    所以我们安装一个支持中文的插件IK

    1.下载安装IK

     下载地址:https://github.com/medcl/elasticsearch-analysis-ik/releases

     选择对应的版本,我这里下载的是7.6.2的版本

    下载后,解压到安装目录下的plugin目录里

     然后再重启一下ElasticSearch

     看到加载了我们新安装的插件

    2.测试使用

    我们使用postman来测试

     报错了,analyzer参数可能是错的,我们查一下文档

    我们修改一下analyzer参数为ik_max_word

    {
        "tokens": [
            {
                "token": "postman",
                "start_offset": 0,
                "end_offset": 7,
                "type": "ENGLISH",
                "position": 0
            },
            {
                "token": "",
                "start_offset": 7,
                "end_offset": 8,
                "type": "CN_CHAR",
                "position": 1
            },
            {
                "token": "一个",
                "start_offset": 8,
                "end_offset": 10,
                "type": "CN_WORD",
                "position": 2
            },
            {
                "token": "",
                "start_offset": 8,
                "end_offset": 9,
                "type": "TYPE_CNUM",
                "position": 3
            },
            {
                "token": "",
                "start_offset": 9,
                "end_offset": 10,
                "type": "COUNT",
                "position": 4
            },
            {
                "token": "不错",
                "start_offset": 10,
                "end_offset": 12,
                "type": "CN_WORD",
                "position": 5
            },
            {
                "token": "",
                "start_offset": 12,
                "end_offset": 13,
                "type": "CN_CHAR",
                "position": 6
            },
            {
                "token": "测试",
                "start_offset": 13,
                "end_offset": 15,
                "type": "CN_WORD",
                "position": 7
            },
            {
                "token": "试工",
                "start_offset": 14,
                "end_offset": 16,
                "type": "CN_WORD",
                "position": 8
            },
            {
                "token": "工具",
                "start_offset": 15,
                "end_offset": 17,
                "type": "CN_WORD",
                "position": 9
            }
        ]
    }

      这次是正确的啦,是我们想要的结果了。

    3.其他

    a)附带了解一下Analyzer与Tokenizer

    https://blog.csdn.net/u014078154/article/details/80135703

    Analyzer包含两个核心组件,Tokenizer以及TokenFilter。两者的区别在于,前者在字符级别处理流,而后者则在词语级别处理流。Tokenizer是Analyzer的第一步,其构造函数接收一个Reader作为参数,而TokenFilter则是一个类似的拦截器,其参数可以是TokenStream、Tokenizer。

      1)Tokenizer
      输入为Reader的TokenStream,其子类必须实现incrementToken()函数,并且在设置属性(attributes) 必须调用AttributeSource中的clearAttributes()方法。

    b)ik_max_word 和 ik_smart 什么区别?

    https://github.com/medcl/elasticsearch-analysis-ik

    ik_max_word: 会将文本做最细粒度的拆分,比如会将“中华人民共和国国歌”拆分为“中华人民共和国,中华人民,中华,华人,人民共和国,人民,人,民,共和国,共和,和,国国,国歌”,会穷尽各种可能的组合,适合 Term Query;

    ik_smart: 会做最粗粒度的拆分,比如会将“中华人民共和国国歌”拆分为“中华人民共和国,国歌”,适合 Phrase 查询。

  • 相关阅读:
    LeetCode: Reverse Words in a String && Rotate Array
    LeetCode: Maximum Product Subarray && Maximum Subarray &子序列相关
    =new、=null、.clear()、system.gc()的区别
    对象转字符串的效率问题
    Java遍历Map对象的四种方式
    JDK升级
    eclipse的任务列表
    统一修改数据库表名字段大小写
    get传数组
    vue编辑回显问题
  • 原文地址:https://www.cnblogs.com/linkbiz/p/12673616.html
Copyright © 2011-2022 走看看