ES分词插件使用

来源:互联网 发布:足彩数据分析软件 编辑:程序博客网 时间:2024/06/05 03:08

Elasticsearch中,内置了很多分词器(analyzers),例如standard (标准分词器)、english (英文分词)和chinese (中文分词)。其中standard 就是无脑的一个一个词(汉字)切分,所以适用范围广,但是精准度低;english 对英文更加智能,可以识别单数负数,大小写,过滤停用词(例如“the”这个词)等;chinese 虽然是针对中文的分词器,但是效果很差,因此一般有中文分词需求时都会安装第三方分词插件,例如ik、jieba、ansj这些。

假设现在我们要索引进ES的文档中包含 我是中国人 这句话,以ES自带的中文分词器为例,通过以下请求:http://localhost:9200/index/_analyze?analyzer=standard&pretty=true&text=我是中国人

我们会得到这样的结果


正常情况下,这不是我们想要的结果,比如我们更希望得到 “中国人”,“中国”,“我”这样的分词,这样我们就需要安装额外的中文分词插件。

    插件的安装步骤很简单,直接从GitHub上下载压缩包后(也可以自己通过源码编译得到),解压到your-es-root/plugins/目录下,这个目录专门用来存放ES相关的插件。

    以IK分词插件为例,我们打开github主页,直接下载压缩包(Linux可通过wget指令):

然后将压缩包解压到plugins目录下

最后我们只要重启ES即可生效。接下来验证一下插件的效果:

(1)创建一个新的索引:

curl -XPUT http://localhost:9200/index

(2)在刚才的索引中创建一个映射规则,红色部分即指定该字段使用的分词器,其中IK定义两种分词模式:

·        ik_max_word:会将文本做最细粒度的拆分,例如「中华人民共和国国歌」会被拆分为「中华人民共和国、中华人民、中华、华人、人民共和国、人民、人、民、共和国、共和、和、国国、国歌」,会穷尽各种可能的组合;

·        ik_smart:会将文本做最粗粒度的拆分,例如「中华人民共和国国歌」会被拆分为「中华人民共和国、国歌」;

 

curl -XPOST http://localhost:9200/index/fulltext/_mapping -d'
{
        "properties": {
            "content": {
                "type": "text",
                "analyzer": "ik_max_word",
                "search_analyzer": "ik_max_word"
            }
        }
    
}'

(3)对刚才的语句进行分词结果展示

curl -XPOST  "http://localhost:9200/index/_analyze?analyzer=ik_max_word&pretty=true&text=我是中国人"  

可以看到,分词结果比较符合语义,并且还去除了停用词“是”。

    因为在中文分词中词典很重要,可以定制一些与具体语言场景相关的词组,在IK中我们可以通过修改IKAnalyzer.cfg.xml配置文件进行词典配置,IKAnalyzer.cfg.xml一般存放在{conf}/analysis-ik/config/IKAnalyzer.cfg.xml o或者{plugins}/elasticsearch-analysis-ik-*/config/IKAnalyzer.cfg.xml目录下

其它分词插件的安装使用过程基本与IK相同。
原创粉丝点击