zoukankan      html  css  js  c++  java
  • ElasticSearch 分词器

    ES内置的6种分词器

    • standard analyzer 

    标准分词器,未设置分词器时默认使用此分词器。在空格、符号处切,中文部分切割为一个一个的汉字。

    切的意思是不要了。多个连续的空格算一个空格,符号指的是!、?、@、。等

    "h!ello wo2rld  a  b我是a中国人d"    =>   h   ello   wo2rld   a   b   我   是  a  中   国   人

    • simple analyzer 

    简单分词器。在空格、符号、数字处切,中文部分不会切割为一个一个的汉字。

    数字指的是1、2.5这种,不包括大写的数字。

    "h!ello wo2rld  a  b我是a中国人d"  => h   ello   wo   rld   a    b我是a中国人d

    • stop analyzer

    停止分词器。在空格、符号、数字、英文介词|冠词 处切,中文部分不会切割为一个一个的汉字。

    英文介词|冠词指的是the、a、an、this、of、at等,注意是英文的,中文的介词|冠词不切。

    "h!ello wo2rld  a  b我是a中国人d"   =>   h  ello   wo  rld    b我是a中国人d         

    在英文中,冠词|介词前后都有一个空格,是单独的一个词,如果前后没有空格,那就不算介词|冠词。

    • whitespace analyzer

    空白符分词器。只在空格处切。

    "h!ello wo2rld  a  b我是a中国人d"  => h!ello   wo2rd   a    b我是a中国人d

    • language analyzer

    语言分词器。语言分词器有很多种,把语言全小写就是,比如english,chinese。

    english、chinese的效果都一样:在空格、符号、英文介词|冠词 处切,中文切割为一个一个的汉字。

    • pattern analyzer

    正则表达式分词器。根据正则表达式来切,默认使用的正则表达式是W+,在匹配W+的地方切。

    w包括英文字母、阿拉伯数字、_,W是任意一个非w字符,中文字符也算W。

    +表示一个及以上,就是说多个非w字符算作一处。

    查看分词结果

    POST 192.168.1.9:9200/_analyze   #GET、POST均可
    {
        "analyzer":"standard",   #使用的分词器
        "text":"hello world!"   #文本
    }

    返回示例

    {
        "tokens": [
            {
                "token": "hello",  #切割好的一块
                "start_offset": 0,  #偏移量,即这一块的在文本中的起始位置、末尾位置
                "end_offset": 5,
                "type": "<ALPHANUM>",
                "position": 0   #这是拆分出来的第几块,从0开始
            },
            {
                "token": "world",
                "start_offset": 6,
                "end_offset": 11,
                "type": "<ALPHANUM>",
                "position": 1
            }
        ]
    }

    设置分词器

    设置分词器需要在创建index时,就设置mapping,给mapping中的某些text字段设置分词器

    PUT  192.168.1.9:9200/mall
    {
    "settings": { "analysis": { "analyzer": { "my_analyzer": { #分词器的名字的可以随便取 "type": "simple" #分词器的类型 } } } }, "mappings": { "properties": { "goods_name": { "type": "text", "analyzer": "my_analyzer" #给此字段设置分词器。使用match根据此字段搜索分词时,会自动使用此分词器 }, "goods_price": { "type": "float" }, "goods_description": { "type": "text" } } } }

    中文分词器

    ES内置的分词器,要么把中文切分为一个一个的汉字,要么就不切割中文部分,对中文分词的实现很差。

    常用的第三方的中文分词器

    • SmartCN    ⼀个简单的中⽂、中英⽂混合⽂本的分词器
    • IK      比smartCN更智能、更友好,推荐

    安装插件

    cd到es的bin目录,执行elasticsearch-plugin命令

    ./elasticsearch-plugin install analysis-smartcn   #install后面是插件名
    #./都可以用sh代替
    sh elasticsearch-plugin install analysis-smartcn
    

    插件会自动安装到es的plugins目录。这种方式下载速度很慢,不推荐。

    到官网下载相关插件

    https://www.elastic.co/guide/en/elasticsearch/plugins/current/analysis.html

    SmartCN、IK都可以在这个页面下载。插件版本要和es的版本一致,如果都是最新版,那一般都是一致的。

    安利一波QQ浏览器,迅雷下载不了的文件我QQ浏览器能下。

    下载后解压,把解压得到的文件夹上传到es的plugins目录下,重启es生效。

    测试下插件是否安装成功

    POST 192.168.1.9:9200/_analyze
    {
     "analyzer": "smartcn",
     "text": "小米笔记本"
    }

    SmartCN的分词器名称是 smartcn ,IK的是 ik_max_word  。

    SmartCN有时候不够智能,比如“小米10pro”,会拆分为 小   米  10   pro

    IK更加智能,拆分为   小米   10pro   10   pro,会从不同的粗细层面进行拆分。 

    卸载插件

    执行es  bin目录下的elasticsearch-plugin命令,最后面是插件名

    ./elasticsearch-plugin remove analysis-smartcn

    SmartCN的插件名是  analysis-smartcn  ,IK的插件名是  ik_smart  。

  • 相关阅读:
    pig安装
    [2013.10.29][Luogu OJ P1873]砍树
    [转帖]OIer之魂、
    [转帖]我们是OIer、
    10007:[2013.10.25]P1.滚土豆(potato.pas/c/cpp)
    [2013.10.18]P2.传作业 (pass.pas/c/cpp)
    [Luogu OJ P1619]解一元二次方程的烦恼
    [Luogu OJ P1433][2013.10.18]DFS基础题-吃奶酪
    高精度加减乘法小程序 Ver 0.9.5 beta
    [2013.10.11]P3.和为零
  • 原文地址:https://www.cnblogs.com/chy18883701161/p/12723427.html
Copyright © 2011-2022 走看看