热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

[大数据]-Elasticsearch5.3.1IK分词,同义词/联想搜索设置

--题外话:最近发现了一些问题,一些高搜索量的东西相当一部分没有价值。发现大部分是一些问题的错误日志。而我是个比较爱贴图的。搜索引擎的检索会将我们的博文文本分词。所以图片内容一般是检索不到的,也就是说

--题外话:最近发现了一些问题,一些高搜索量的东西相当一部分没有价值。发现大部分是一些问题的错误日志。而我是个比较爱贴图的。搜索引擎的检索会将我们的博文文本分词。所以图片内容一般是检索不到的,也就是说同样的问题最好是帖错误代码,日志,虽然图片很直观,但是并不利与传播。希望大家能够优化一部分博文的内容,这样有价值的东西传播量可能会更高。

本文主要是记录Elasticsearch5.3.1 IK分词,同义词/联想搜索设置,本来是要写fscrawler的多种格式(html,pdf,word...)数据导入的,但是IK分词和同义词配置还是折腾了两天,没有很详细的内容,这里决定还是记录下来。IK Analyzer是一个开源的,基于java语言开发的轻量级的中文分词工具包。从2006年12月推出1.0版开始, IKAnalyzer已经推出了3个大版本。最初,它是以开源项目Luence为应用主体的,结合词典分词和文法分析算法的中文分词组件。新版本的IK Analyzer 3.0则发展为面向Java的公用分词组件,独立于Lucene项目,同时提供了对Lucene的默认优化实现。所以IK跟ES本来是天生一对,当然是对于中文来说,起码对于英文分词来说,空格分词就足够简单粗暴。中文检索为了达到更好的检索效果分词效果还是很重要的,所以IK分词插件有必要一试。

一、IK分词的安装:

1、下载IK分词器:https://github.com/medcl/elasticsearch-analysis-ik/releases 我这里下载的是5.3.2的已经编译的版本,因为这里没有5.3.1的版本。

2、在Elasticsearch的plugins目录下新建目录analysis-ik: mkdir analysis-ik 

3、将IK分词器的压缩包解压到analysis-ik目录下:

  • [rzxes@rzxes analysis-ik]$ unzip elasticsearch-analysis-ik-5.3.2.zip 查看目录结构如下:

4、编辑plugin-sescriptor.properties:

  • 修改一些配置,主要是修改elasticsearch.version,因为下载的是5.3.2的而我本身是5.3.1的elasticsearch所以这里修改对应即可。

5、启动Elasticsearch测试IK分词:[rzxes@rzxes elasticsearch-5.3.1]$ bin/elasticsearch 

  • 如下图可以看到loaded plugin [analysis-ik],说明已经加载了插件
  • IK分词支持两种分析器Analyzer: ik_smart , ik_max_word , 两种分词器Tokenizer: ik_smart , ik_max_word,

    ik_max_word: 会将文本做最细粒度的拆分,比如会将“中华人民共和国国歌”拆分为“中华人民共和国,中华人民,中华,华人,人民共和国,人民,人,民,共和国,共和,和,国国,国歌”,会穷尽各种可能的组合;

    ik_smart: 会做最粗粒度的拆分,比如会将“中华人民共和国国歌”拆分为“中华人民共和国,国歌”。

  • 试验一下能否进行分词:调用Elasticsearch的分词器API
    • standard分词器【analyzer=standard】http://192.168.230.150:9200/_analyze?analyzer=standard&pretty=true&text=hello word西红柿 结果如下:
    • {
      "tokens" : [
      {
      "token" : "hello",
      "start_offset" : 0,
      "end_offset" : 5,
      "type" : "
      <ALPHANUM>",
      "position" : 0
      },
      {
      "token" : "word",
      "start_offset" : 6,
      "end_offset" : 10,
      "type" : "
      <ALPHANUM>",
      "position" : 1
      },
      {
      "token" : "西",
      "start_offset" : 10,
      "end_offset" : 11,
      "type" : "
      <IDEOGRAPHIC>",
      "position" : 2
      },
      {
      "token" : "红",
      "start_offset" : 11,
      "end_offset" : 12,
      "type" : "
      <IDEOGRAPHIC>",
      "position" : 3
      },
      {
      "token" : "柿",
      "start_offset" : 12,
      "end_offset" : 13,
      "type" : "
      <IDEOGRAPHIC>",
      "position" : 4
      }
      ]
      }
    • 采用IK分词器【analyzer=ik_smart】http://192.168.230.150:9200/_analyze?analyzer=ik_smart&pretty=true&text=hello word西红柿 结果如下:
    • {
      "tokens" : [
      {
      "token" : "hello",
      "start_offset" : 0,
      "end_offset" : 5,
      "type" : "ENGLISH",
      "position" : 0
      },
      {
      "token" : "word",
      "start_offset" : 6,
      "end_offset" : 10,
      "type" : "ENGLISH",
      "position" : 1
      },
      {
      "token" : "西红柿",
      "start_offset" : 10,
      "end_offset" : 13,
      "type" : "CN_WORD",
      "position" : 2
      },
      {
      "token" : "9f",
      "start_offset" : 13,
      "end_offset" : 15,
      "type" : "LETTER",
      "position" : 3
      }
      ]
      }
    • 采用IK分词器【analyzer=ik_max_word】http://192.168.230.150:9200/_analyze?analyzer=ik_max_word&pretty=true&text=hello word中华人民
    • {
      "tokens" : [
      {
      "token" : "hello",
      "start_offset" : 0,
      "end_offset" : 5,
      "type" : "ENGLISH",
      "position" : 0
      },
      {
      "token" : "word",
      "start_offset" : 6,
      "end_offset" : 10,
      "type" : "ENGLISH",
      "position" : 1
      },
      {
      "token" : "中华人民",
      "start_offset" : 10,
      "end_offset" : 14,
      "type" : "CN_WORD",
      "position" : 2
      },
      {
      "token" : "中华",
      "start_offset" : 10,
      "end_offset" : 12,
      "type" : "CN_WORD",
      "position" : 3
      },
      {
      "token" : "华人",
      "start_offset" : 11,
      "end_offset" : 13,
      "type" : "CN_WORD",
      "position" : 4
      },
      {
      "token" : "人民",
      "start_offset" : 12,
      "end_offset" : 14,
      "type" : "CN_WORD",
      "position" : 5
      }
      ]
      }
  • 致此IK分词就安装成功了,非常简单只需要下载编译包解压就可以了,至于修改配置是对于版本不对应的情况。
二、配置同义词对应:
  • 配置同义词是为了能够检索一个词的时候相关词也能够检索到。关联词和同义词可以合二为一配置在这个文件里。
  • 新建同义词文件:在Elasticsearch的confg目录下新建文件夹analysis并在其下创建文件synonyms.txt,这一步可以直接在conf目录下创建synonyms.txt并不影响,只需要在后面建立缩印的时候指定路径就行。 mkdir analysis   vim synonyms.txt 
  • 向文件synonyms.txt添加如下内容: 注意‘"逗号"一定是英文的
  • 西红柿,番茄 =>西红柿,番茄
    社保,公积金 =>社保,公积金
  • 启动Elasticsearch,此时同义词就会被加载进来。
三、测试同义词是否生效:
  • 创建index:自定义分词器和过滤器并引用IK分词器。
  • curl -XPUT 'http://192.168.230.150:9200/index' -d' 
    {
    "index": {
    "analysis": {
    "analyzer": {
    "by_smart": {
    "type": "custom",
    "tokenizer": "ik_smart",
    "filter": ["by_tfr","by_sfr"],
    "char_filter": ["by_cfr"]
    },
    "by_max_word": {
    "type": "custom",
    "tokenizer": "ik_max_word",
    "filter": ["by_tfr","by_sfr"],
    "char_filter": ["by_cfr"]
    }
    },
    "filter": {
    "by_tfr": {
    "type": "stop",
    "stopwords": [" "]
    },
    "by_sfr": {
    "type": "synonym",
    "synonyms_path": "analysis/synonyms.txt"
    }
    },
    "char_filter": {
    "by_cfr": {
    "type": "mapping",
    "mappings": ["| => |"]
    }
    }
    }
    }
    }'
  • 创建mapping:定义一个字段title,并且设置分词器analyzer和查询分词器search_analyzer.
  • curl -XPUT 'http://192.168.230.150:9200/index/_mapping/typename' -d'
    {
    "properties": {
    "title": {
    "type": "text",
    "index": "analyzed",
    "analyzer": "by_max_word",
    "search_analyzer": "by_smart"
    }
    }
    }'
  • 使用自定义分词器分词: curl -XGET 'http://192.168.230.150:9200/index/_analyze?pretty=true&analyzer=by_smart' -d '{"text":"番茄"}' 结果如下:分词西红柿会通过同义词创建相关索引。
  • 添加数据:
  • curl -XPOST http://192.168.230.150:9200/index/title/1 -d'{"title":"我有一个西红柿"}'
    curl -XPOST http://192.168.230.150:9200/index/title/2 -d'{"title":"番茄炒蛋饭"}'
    curl -XPOST http://192.168.230.150:9200/index/title/3 -d'{"title":"西红柿鸡蛋面"}'
  • 检索数据:我们从index索引中检索关键字"番茄"并用标签标记命中的关键字。
  • curl -XPOST http://192.168.230.150:9200/index/title/_search  -d'
    {
    "query" : { "match" : { "title" : "番茄" }},
    "highlight" : {
    "pre_tags" : ["
    <tag1>", "<tag2>"],
    "post_tags" : ["
    tag1>", "tag2>"],
    "fields" : {
    "title" : {}
    }
    }
    }
    '

    结果如下:命中了三条数据,命中了"番茄"和他的同义词"西红柿".

  • 致此,IK分词以及同义词的配置就完成了,。
三、存在的故障和问题:
  • 非常感谢写这边http://blog.csdn.net/u012859681/article/details/60147864文章的博友,我写的很大一部分是参考他的,但是其中有些问题试验不通过。可能是自身配的问题,大家可以多方参考。
  • 故障1:讲道理如下两个结果应该是一样的,但是这里却是如下,可能是哪里有问题。。。【此故障已解决,机子脑抽了,睡一觉起来自己就好了】
  • 问题2:有没有可以直接配置的,按这样来的话见建一次索引就要设置一次分词器,有没有直接修改默认配置的方法。????
    • 以前好像是配置文件加下面两行:
      index.analysis.analyzer.default.type" : "ik",
      index.analysis.analyzer.default.use_smart" : "true"
      但是爆了错:
      Since elasticsearch 5.x index level settings can NOT be set on the nodes 
      configuration like the elasticsearch.yaml,
      in system properties or command line
      arguments.In order to upgrade all indices the settings must be updated via the
      /${index}/_settings API. Unless all settings are dynamic all indices must be closed
      in order to apply the upgradeIndices created in the future should use index templates
      to
      set default values.
      5.x版本以后就不支持这种设置方式,因为考虑到后面的一些更新。
      In order to upgrade all indices the settings must be updated via the /${index}/_settings API
      没理解错的话说了半天还是要跟Index绑定。
    • ES中文社区爆6.0可能会移除type,
  • 问题3:synonyms.txt这个同义词配置文件中的格式有哪几种,分别表示什么??如故障1中的文章内提到的两种格式,一种有"=>",另一无"=>",但是第二种我试验有问题。【此问题已解决,两种配置都可用】如下所示:添加一行如下:儿童,青年,少年,幼年。不过这两种建立索引的方式有什么区别还没有弄明白。
  • 儿童,青年,少年,幼年
    西红柿,番茄 => 西红柿,番茄
    社保,公积金 => 社保,公积金
  • 重启ES再进行分词:curl -XGET 'http://192.168.230.150:9200/index/_analyze?pretty=true&analyzer=by_smart' -d '{"text":"青年"}' 结果如下:

  • [rzxes@rzxes elasticsearch-5.3.1]$  curl -XGET 'http://192.168.230.150:9200/index/_analyze?pretty=true&analyzer=by_smart' -d '{"text":"青年"}'
    {
    "tokens" : [
    {
    "token" : "青年",
    "start_offset" : 0,
    "end_offset" : 2,
    "type" : "CN_WORD",
    "position" : 0
    },
    {
    "token" : "儿童",
    "start_offset" : 0,
    "end_offset" : 2,
    "type" : "SYNONYM",
    "position" : 0
    },
    {
    "token" : "少年",
    "start_offset" : 0,
    "end_offset" : 2,
    "type" : "SYNONYM",
    "position" : 0
    },
    {
    "token" : "幼年",
    "start_offset" : 0,
    "end_offset" : 2,
    "type" : "SYNONYM",
    "position" : 0
    }
    ]
    }
四、联想检索:(这种检索名称纯属个人杜撰)
  • 目标:搜索 "笔记本",出现"联想","戴尔","电脑"。。等等相关连的词。类似ML的相似度高的词。。或者推荐系统。
  • 在这里只需要类比同义词,配置synonyms.txt。将检索词与关联词做对应就可以了。

 


推荐阅读
  • 从零基础到精通的前台学习路线
    随着互联网的发展,前台开发工程师成为市场上非常抢手的人才。本文介绍了从零基础到精通前台开发的学习路线,包括学习HTML、CSS、JavaScript等基础知识和常用工具的使用。通过循序渐进的学习,可以掌握前台开发的基本技能,并有能力找到一份月薪8000以上的工作。 ... [详细]
  • 本文介绍了如何将PPT格式转换成PDF,并推荐了一款高效的PPT转换成PDF转换器。该转换器利用最新的超线程技术核心和多核心CPU性能,提高了转换效率和转换质量。同时,该转换器具备万能转换模式,可以轻松实现不同类型、不同内容和不同排版的PPT文件的转换。用户可以通过下载链接获取该转换器。 ... [详细]
  • PRML读书会第十四章 Combining Models(committees,Boosting,AdaBoost,决策树,条件混合模型)...
    主讲人网神(新浪微博:豆角茄子麻酱凉面)网神(66707180)18:57:18大家好,今天我们讲一下第14章combiningmodel ... [详细]
  • 本文详细解析了JavaScript中相称性推断的知识点,包括严厉相称和宽松相称的区别,以及范例转换的规则。针对不同类型的范例值,如差别范例值、统一类的原始范例值和统一类的复合范例值,都给出了具体的比较方法。对于宽松相称的情况,也解释了原始范例值和对象之间的比较规则。通过本文的学习,读者可以更好地理解JavaScript中相称性推断的概念和应用。 ... [详细]
  • 如何去除Win7快捷方式的箭头
    本文介绍了如何去除Win7快捷方式的箭头的方法,通过生成一个透明的ico图标并将其命名为Empty.ico,将图标复制到windows目录下,并导入注册表,即可去除箭头。这样做可以改善默认快捷方式的外观,提升桌面整洁度。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • 生成对抗式网络GAN及其衍生CGAN、DCGAN、WGAN、LSGAN、BEGAN介绍
    一、GAN原理介绍学习GAN的第一篇论文当然由是IanGoodfellow于2014年发表的GenerativeAdversarialNetworks(论文下载链接arxiv:[h ... [详细]
  • 本文介绍了一些好用的搜索引擎的替代品,包括网盘搜索工具、百度网盘搜索引擎等。同时还介绍了一些笑话大全、GIF笑话图片、动态图等资源的搜索引擎。此外,还推荐了一些迅雷快传搜索和360云盘资源搜索的网盘搜索引擎。 ... [详细]
  • HTML学习02 图像标签的使用和属性
    本文介绍了HTML中图像标签的使用和属性,包括定义图像、定义图像地图、使用源属性和替换文本属性。同时提供了相关实例和注意事项,帮助读者更好地理解和应用图像标签。 ... [详细]
  • 本文讨论了在手机移动端如何使用HTML5和JavaScript实现视频上传并压缩视频质量,或者降低手机摄像头拍摄质量的问题。作者指出HTML5和JavaScript无法直接压缩视频,只能通过将视频传送到服务器端由后端进行压缩。对于控制相机拍摄质量,只有使用JAVA编写Android客户端才能实现压缩。此外,作者还解释了在交作业时使用zip格式压缩包导致CSS文件和图片音乐丢失的原因,并提供了解决方法。最后,作者还介绍了一个用于处理图片的类,可以实现图片剪裁处理和生成缩略图的功能。 ... [详细]
  • 本文介绍了在无法联网的情况下,通过下载rpm包离线安装zip和unzip的方法。详细介绍了如何搜索并下载合适的rpm包,以及如何使用rpm命令进行安装。 ... [详细]
  • 3年半巨亏242亿!商汤高估了深度学习,下错了棋?
    转自:新智元三年半研发开支近70亿,累计亏损242亿。AI这门生意好像越来越不好做了。近日,商汤科技已向港交所递交IPO申请。招股书显示& ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • 前言:拿到一个案例,去分析:它该是做分类还是做回归,哪部分该做分类,哪部分该做回归,哪部分该做优化,它们的目标值分别是什么。再挑影响因素,哪些和分类有关的影响因素,哪些和回归有关的 ... [详细]
author-avatar
我爱麦兜李
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有