理解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

相关文章

2024.6.24 IDEA中文乱码问题(服务器 控制台 TOMcat)实测已解决

1.问题产生原因: 1.文件编码不一致:如果文件的编码方式与IDEA设置的编码方式不一致,就会产生乱码。确保文件和IDEA使用相同的编码,通常是UTF-8。2.IDEA设置问题:检查IDEA的全局编码设置和项目编码设置是否正确。3.终端或控制台编码问题:如果你在终端或控制台看到乱码,可能是终端的编码设置问题。确保终端使用的是支持你的文件的编码方式。 2.解决方案: 1.File -> S

回调的简单理解

之前一直不太明白回调的用法,现在简单的理解下 就按这张slidingmenu来说,主界面为Activity界面,而旁边的菜单为fragment界面。1.现在通过主界面的slidingmenu按钮来点开旁边的菜单功能并且选中”区县“选项(到这里就可以理解为A类调用B类里面的c方法)。2.通过触发“区县”的选项使得主界面跳转到“区县”相关的新闻列表界面中(到这里就可以理解为B类调用A类中的d方法

如何理解redis是单线程的

写在文章开头 在面试时我们经常会问到这样一道题 你刚刚说redis是单线程的,那你能不能告诉我它是如何基于单个线程完成指令接收与连接接入的? 这时候我们经常会得到沉默,所以对于这道题,笔者会直接通过3.0.0源码分析的角度来剖析一下redis单线程的设计与实现。 Hi,我是 sharkChili ,是个不断在硬核技术上作死的 java coder ,是 CSDN的博客专家 ,也是开源

MySQL理解-下载-安装

MySQL理解: mysql:是一种关系型数据库管理系统。 下载: 进入官网MySQLhttps://www.mysql.com/  找到download 滑动到最下方:有一个开源社区版的链接地址: 然后就下载完成了 安装: 双击: 一直next 一直next这一步: 一直next到这里: 等待加载完成: 一直下一步到这里

PyTorch模型_trace实战:深入理解与应用

pytorch使用trace模型 1、使用trace生成torchscript模型2、使用trace的模型预测 1、使用trace生成torchscript模型 def save_trace(model, input, save_path):traced_script_model = torch.jit.trace(model, input)<

isa指针的理解

D3实例isa指向D3类对象。D3类的话isa指向D3元类对象。D3元类保存类中的方法调度列表,包括类方法和对象方法

WeakHashMap深入理解

这一章,我们对WeakHashMap进行学习。 我们先对WeakHashMap有个整体认识,然后再学习它的源码,最后再通过实例来学会使用WeakHashMap。 第1部分 WeakHashMap介绍 第2部分 WeakHashMap数据结构 第3部分 WeakHashMap源码解析(基于JDK1.6.0_45) 第4部分 WeakHashMap遍历方式 第5部分 WeakHashMap示例

netty中常用概念的理解

目录   目录ChannelHandler ChannelHandler功能介绍通过ChannelHandlerAdapter自定义拦截器ChannelHandlerContext接口ChannelPipeline ChannelPipeline介绍ChannelPipeline工作原理ChannelHandler的执行顺序   在《Netty权威指南》(第二版)中,ChannelP

安全科普:理解SSL(https)中的对称加密与非对称加密

今天刚好为站点的后台弄了下https,就来分享我了解的吧。 密码学最早可以追溯到古希腊罗马时代,那时的加密方法很简单:替换字母。 早期的密码学:   古希腊人用一种叫 Scytale 的工具加密。更快的工具是 transposition cipher—:只是把羊皮纸卷在一根圆木上,写下信息,羊皮纸展开后,这些信息就加密完成了。 虽然很容易被解密,但它确实是第一个在现实中应用加密的

java同步锁以及级别升级的理解

首先简单说下先偏向锁、轻量级锁、重量级锁三者各自的应用场景: 偏向锁:只有一个线程进入临界区;轻量级锁:多个线程交替进入临界区;重量级锁:多个线程同时进入临界区。 还要明确的是,偏向锁、轻量级锁都是JVM引入的锁优化手段,目的是降低线程同步的开销。比如以下的同步代码块:   synchronized (lockObject) { // do something } 上述同步代码块