天天看点

Elasticsearch实现中文分词

教程目录

  • ​​0x00 教程内容​​
  • ​​0x01 默认标准分词效果展示​​
  • ​​1. 默认标准分词器的使用​​
  • ​​2. 新建一个测试索引​​
  • ​​3. 查询及效果展示​​
  • ​​0x02 分词插件elasticsearch-analysis-ik​​
  • ​​1. 下载插件​​
  • ​​2. 启动Elasticsearch​​
  • ​​3. 重新创建测试索引​​
  • ​​0x03 ik分词效果展示​​
  • ​​1. ik_max_word分词​​
  • ​​2. ik_smart分词​​
  • ​​0xFF 总结​​

0x00 教程内容

  1. 默认标准分词效果展示
  2. 分词插件elasticsearch-analysis-ik
  3. ik分词效果展示

0x01 默认标准分词效果展示

1. 默认标准分词器的使用

a. 英文分词效果展示

​http://localhost:9200/_analyze?analyzer=standard&pretty=true&text=I am teacher SHAO​

Elasticsearch实现中文分词

点击提交请求后,可看到右边有分词效果:

Elasticsearch实现中文分词

b. 中文分词效果展示

​​http://localhost:9200/_analyze?analyzer=standard&pretty=true&text=邵奈一老师​​

Elasticsearch实现中文分词

可看到,老师都被分开了,对于中文效果并不理想

2. 新建一个测试索引

a. 索引名:shaonaiyi,类型:teacher

​​http://localhost:9200/shaonaiyi​​

{
  "settings": {
    "number_of_replicas": 0
  },
  "mappings": {
    "teacher": {
      "dynamic": false,
      "properties": {
        "value": {
          "type": "text"
        }
      }
    }
  }
}      
Elasticsearch实现中文分词

b. 插入数据

​​http://localhost:9200/shaonaiyi/teacher​​

{
  "value":"学大数据"
}      
Elasticsearch实现中文分词

类似插入多两条,如下面:

{
  "value":"大学讲师"
}      
{
  "value":"学习技能"
}      
3. 查询及效果展示

a. 查询【POST】

​​http://localhost:9200/shaonaiyi/teacher/_search/​​

{
  "query": {
    "match": {
      "value": "大学"
    }
  }
}      
Elasticsearch实现中文分词

b .结论

我们想要的结果只是:大学讲师,可是其他带“大”字和“学”字的结果都搜索出来了,这不是我们想要的结果。

0x02 分词插件elasticsearch-analysis-ik

1. 下载插件

a. ​​github.com​​

Elasticsearch实现中文分词
Elasticsearch实现中文分词

b. 翻页,找到自己对应的Elasticsearch版本(如:5.6.1)

Elasticsearch实现中文分词

c. 点击下载并解压到Elasticsearch主目录的plugins目录下(如:E:\SmallTools\elasticsearch-5.6.1\plugins\elasticsearch)

Elasticsearch实现中文分词
2. 启动Elasticsearch

a. 关闭之前的elasticsearch.bat窗口(如没有启动则直接启动)

b. 打开elasticsearch.bat文件

c. 重启后刷新http://localhost:9100/,可看到前面创建的shaonaiyi索引,但需要重新创建索引,因为插件安装好了

Elasticsearch实现中文分词
3. 重新创建测试索引

a. 删除之前的shaonaiyi索引【DELETE】

​​http://localhost:9200/shaonaiyi​​

Elasticsearch实现中文分词

b. 创建索引【PUT】

​​http://localhost:9200/shaonaiyi​​

{
  "settings": {
    "number_of_replicas": 0
  },
  "mappings": {
    "teacher": {
      "dynamic": false,
      "properties": {
        "value": {
          "type": "text",
          "analyzer": "ik_max_word",
          "search_analyzer": "ik_max_word"
        }
      }
    }
  }
}      
Elasticsearch实现中文分词

0x03 ik分词效果展示

1. ik_max_word分词

a. 查询【POST】

​​http://localhost:9200/_analyze?analyzer=ik_max_word&pretty=true&text=邵奈一老师​​

Elasticsearch实现中文分词
2. ik_smart分词

a. 将上面的三个均ik_max_word改为ik_smart

b. 创建一个新索引shaonaiyi888

c. 重新查询,比较不同

Elasticsearch实现中文分词
Elasticsearch实现中文分词

0xFF 总结

  1. 如没有Elasticsearch基础或者有疑惑,请参考此篇教程:​​Elasticsearch的安装(windows)​​
  2. 更多与ik分词插件相关知识请看github:​​medcl/elasticsearch-analysis-ik​​
  3. 看以后是否有需求和时间,再出一个模仿百度的简单搜索引擎。

作者简介:​​邵奈一​​

大学大数据讲师、大学市场洞察者、专栏编辑

公众号、微博、 :​​邵奈一​​

继续阅读