理解ElasticSearch的中文分词器【IK】

2024-04-23 10:18

本文主要是介绍理解ElasticSearch的中文分词器【IK】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

从【 https://github.com/medcl/elasticsearch-analysis-ik/releases 】下载【 elasticsearch-analysis-ik-1.6.0.zip】文件。
里面值包含了代码,需要执行【mvn package】进行编译打包,生成【elasticsearch-analysis-ik-1.6.0.jar】文件。
拷贝【target/releases/elasticsearch-analysis-ik-1.6.0.zip】中的文件到【<ES_ROOT>/plugins/ik】目录中。
拷贝【elasticsearch-analysis-ik-1.6.0.zip】中的【config/ik】中的文件到【<ES_ROOT>/config/ik】目录中。
重启 ElasticSearch 即可。

分词器:

IK 包含两类分词器:
  1. ik_max_word: 会将文本做最细粒度的拆分,比如会将“中华人民共和国国歌”拆分为“中华人民共和国,中华人民,中华,华人,人民共和国,人民,人,民,共和国,共和,和,国国,国歌”,会穷尽各种可能的组合;
  2. ik_smart: 会做最粗粒度的拆分,比如会将“中华人民共和国国歌”拆分为“中华人民共和国,国歌”。
不同项目可以不同选择,个人是推荐使用【 ik_smart】,相对来说分出来的词更符合直观感受。

使用样例:

1. 先创建名叫【index】的索引:
   
  1. curl -XPUT http://localhost:9200/index

2. 创建名为【fulltext】的 类型 ,并设定其使用【IK】分词器。这一步很重要,必须在往索引中添加数据前完成。
   
  1. curl -XPOST http://localhost:9200/index/fulltext/_mapping -d'
  2. {
  3. "fulltext": {
  4. "_all": {
  5. "analyzer": "ik_max_word",
  6. "search_analyzer": "ik_max_word",
  7. "term_vector": "no",
  8. "store": "false"
  9. },
  10. "properties": {
  11. "content": {
  12. "type": "string",
  13. "store": "no",
  14. "term_vector": "with_positions_offsets",
  15. "analyzer": "ik_max_word",
  16. "search_analyzer": "ik_max_word",
  17. "include_in_all": "true",
  18. "boost": 8
  19. }
  20. }
  21. }
  22. }'

3. 往索引库中添加数据:
   
  1. curl -XPOST http://localhost:9200/index/fulltext/1 -d'{"content":"美国留给伊拉克的是个烂摊子吗"}'
  2. curl -XPOST http://localhost:9200/index/fulltext/2 -d'{"content":"公安部:各地校车将享最高路权"}'
  3. curl -XPOST http://localhost:9200/index/fulltext/3 -d'{"content":"中韩渔警冲突调查:韩警平均每天扣1艘中国渔船"}'
  4. curl -XPOST http://localhost:9200/index/fulltext/4 -d'{"content":"中国驻洛杉矶领事馆遭亚裔男子枪击 嫌犯已自首"}'

4. 查询测试:

查询语句:
   
  1. curl -XPOST http://localhost:9200/index/fulltext/_search -d'
  2. {
  3. "query" : { "term" : { "content" : "中国" }},
  4. "highlight" : {
  5. "pre_tags" : ["<tag1>", "<tag2>"],
  6. "post_tags" : ["</tag1>", "</tag2>"],
  7. "fields" : {
  8. "content" : {}
  9. }
  10. }
  11. }
  12. '

查询结果:
   
  1. {
  2. "took": 14,
  3. "timed_out": false,
  4. "_shards": {
  5. "total": 5,
  6. "successful": 5,
  7. "failed": 0
  8. },
  9. "hits": {
  10. "total": 2,
  11. "max_score": 2,
  12. "hits": [
  13. {
  14. "_index": "index",
  15. "_type": "fulltext",
  16. "_id": "4",
  17. "_score": 2,
  18. "_source": {
  19. "content": "中国驻洛杉矶领事馆遭亚裔男子枪击 嫌犯已自首"
  20. },
  21. "highlight": {
  22. "content": [
  23. "<tag1>中国</tag1>驻洛杉矶领事馆遭亚裔男子枪击 嫌犯已自首 "
  24. ]
  25. }
  26. },
  27. {
  28. "_index": "index",
  29. "_type": "fulltext",
  30. "_id": "3",
  31. "_score": 2,
  32. "_source": {
  33. "content": "中韩渔警冲突调查:韩警平均每天扣1艘中国渔船"
  34. },
  35. "highlight": {
  36. "content": [
  37. "均每天扣1艘<tag1>中国</tag1>渔船 "
  38. ]
  39. }
  40. }
  41. ]
  42. }
  43. }

参考:

  1. https://github.com/medcl/elasticsearch-analysis-ik
  2. 《Elasticsearch: The Definitive Guide》(电子书)

这篇关于理解ElasticSearch的中文分词器【IK】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/928516

相关文章

深入理解Go语言中二维切片的使用

《深入理解Go语言中二维切片的使用》本文深入讲解了Go语言中二维切片的概念与应用,用于表示矩阵、表格等二维数据结构,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧... 目录引言二维切片的基本概念定义创建二维切片二维切片的操作访问元素修改元素遍历二维切片二维切片的动态调整追加行动态

从原理到实战深入理解Java 断言assert

《从原理到实战深入理解Java断言assert》本文深入解析Java断言机制,涵盖语法、工作原理、启用方式及与异常的区别,推荐用于开发阶段的条件检查与状态验证,并强调生产环境应使用参数验证工具类替代... 目录深入理解 Java 断言(assert):从原理到实战引言:为什么需要断言?一、断言基础1.1 语

Redis出现中文乱码的问题及解决

《Redis出现中文乱码的问题及解决》:本文主要介绍Redis出现中文乱码的问题及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. 问题的产生2China编程. 问题的解决redihttp://www.chinasem.cns数据进制问题的解决中文乱码问题解决总结

RedisTemplate默认序列化方式显示中文乱码的解决

《RedisTemplate默认序列化方式显示中文乱码的解决》本文主要介绍了SpringDataRedis默认使用JdkSerializationRedisSerializer导致数据乱码,文中通过示... 目录1. 问题原因2. 解决方案3. 配置类示例4. 配置说明5. 使用示例6. 验证存储结果7.

spring IOC的理解之原理和实现过程

《springIOC的理解之原理和实现过程》:本文主要介绍springIOC的理解之原理和实现过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、IoC 核心概念二、核心原理1. 容器架构2. 核心组件3. 工作流程三、关键实现机制1. Bean生命周期2.

深入理解Apache Kafka(分布式流处理平台)

《深入理解ApacheKafka(分布式流处理平台)》ApacheKafka作为现代分布式系统中的核心中间件,为构建高吞吐量、低延迟的数据管道提供了强大支持,本文将深入探讨Kafka的核心概念、架构... 目录引言一、Apache Kafka概述1.1 什么是Kafka?1.2 Kafka的核心概念二、Ka

Elasticsearch 在 Java 中的使用教程

《Elasticsearch在Java中的使用教程》Elasticsearch是一个分布式搜索和分析引擎,基于ApacheLucene构建,能够实现实时数据的存储、搜索、和分析,它广泛应用于全文... 目录1. Elasticsearch 简介2. 环境准备2.1 安装 Elasticsearch2.2 J

一文教你解决Python不支持中文路径的问题

《一文教你解决Python不支持中文路径的问题》Python是一种广泛使用的高级编程语言,然而在处理包含中文字符的文件路径时,Python有时会表现出一些不友好的行为,下面小编就来为大家介绍一下具体的... 目录问题背景解决方案1. 设置正确的文件编码2. 使用pathlib模块3. 转换路径为Unicod

Python爬虫selenium验证之中文识别点选+图片验证码案例(最新推荐)

《Python爬虫selenium验证之中文识别点选+图片验证码案例(最新推荐)》本文介绍了如何使用Python和Selenium结合ddddocr库实现图片验证码的识别和点击功能,感兴趣的朋友一起看... 目录1.获取图片2.目标识别3.背景坐标识别3.1 ddddocr3.2 打码平台4.坐标点击5.图

ElasticSearch+Kibana通过Docker部署到Linux服务器中操作方法

《ElasticSearch+Kibana通过Docker部署到Linux服务器中操作方法》本文介绍了Elasticsearch的基本概念,包括文档和字段、索引和映射,还详细描述了如何通过Docker... 目录1、ElasticSearch概念2、ElasticSearch、Kibana和IK分词器部署