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

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

本文主要是记录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目录下:

  • [[email protected] 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分词: [[email protected] 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:有没有可以直接配置的,按这样来的话见建一次索引就要设置一次分词器,有没有直接修改默认配置的方法。????
  • 问题3:synonyms.txt这个同义词配置文件中的格式有哪几种,分别表是什么??如故障1中的文章内提到的两种格式,一种有"=>",另一无"=>",但是第二种我试验有问题。

四、联想检索:(这种检索名称纯属个人杜撰)

  • 目标:搜索 "笔记本",出现"联想","戴尔","电脑"。。等等相关连的词。类似ML的相似度高的词。。或者推荐系统。
  • 在这里只需要类比同义词,配置synonyms.txt。将检索词与关联词做对应就可以了。
时间: 2024-10-20 14:17:19

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

[大数据]-Elasticsearch5.3.1+Kibana5.3.1从单机到分布式的安装与使用&lt;2&gt;

前言:上篇[大数据]-Elasticsearch5.3.1+Kibana5.3.1从单机到分布式的安装与使用<1>中介绍了ES ,Kibana的单机到分布式的安装,这里主要是介绍Elasticsearch5.3.1的一些概念.官方示例的基本数据导入,数据查询以及ES,kibana的功能组件的认识和熟悉. 一.Elasticsearch中的基本概念: Elasticsearch所涉及到的每一项技术都不是创新或者革命性的,全文检索,分析系统以及分布式数据库这些早就已经存在了.它的革命性在于将这些独

Elasticsearch5.1.1+ik分词器安装小记

一.安装elasticsearch 1.首先需要安装好java,并配置好环境变量,详细教程请看 http://tecadmin.net/install-java-8-on-centos-rhel-and-fedora/# 2.安装ElasticSearch,下载rpm包: wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.1.1.rpm rpm -ivh elasticsearch-5.1.1.rp

[大数据]-Logstash-5.3.1的安装导入数据到Elasticsearch5.3.1并配置同义词过滤

阅读此文请先阅读上文:[大数据]-Elasticsearch5.3.1 IK分词,同义词/联想搜索设置,前面介绍了ES,Kibana5.3.1的安装配置,以及IK分词的安装和同义词设置,这里主要记录Logstash导入mysql数据到Elasticsearch5.3.1并设置IK分词和同义词.由于logstash配置好JDBC,ES连接之后运行脚本一站式创建index,mapping,导入数据.但是如果我们要配置IK分词器就需要修改创建index,mapping的配置,下面详细介绍. 一.Log

[大数据]-Fscrawler导入文件(txt,html,pdf,worf...)到Elasticsearch5.3.1并配置同义词过滤

fscrawler是ES的一个文件导入插件,只需要简单的配置就可以实现将本地文件系统的文件导入到ES中进行检索,同时支持丰富的文件格式(txt.pdf,html,word...)等等.下面详细介绍下fscrawler是如何工作和配置的. 一.fscrawler的简单使用: 1.下载: wget https://repo1.maven.org/maven2/fr/pilato/elasticsearch/crawler/fscrawler/2.2/fscrawler-2.2.zip 2.解压: 

IK分词器原理与源码分析

原文:http://3dobe.com/archives/44/ 引言 做搜索技术的不可能不接触分词器.个人认为为什么搜索引擎无法被数据库所替代的原因主要有两点,一个是在数据量比较大的时候,搜索引擎的查询速度快,第二点在于,搜索引擎能做到比数据库更理解用户.第一点好理解,每当数据库的单个表大了,就是一件头疼的事,还有在较大数据量级的情况下,你让数据库去做模糊查询,那也是一件比较吃力的事(当然前缀匹配会好得多),设计上就应当避免.关于第二点,搜索引擎如何理解用户,肯定不是简单的靠匹配,这里面可以加

大数据语义分析开启“智能预测客户”时代

近年来,各大大数据服务提供商越来越关注利用人工智能(AI)来帮助分析大规模的数据,从而获得预测性的洞察,从而帮助各企事业单位更好的了解客户情况.虽然这背后的相关技术--语义精准搜索分析算法几年前就已诞生,但直到最近才能够在足够广泛.足够快速地应用到大规模数据挖掘并发挥它最大潜能.可以预见,数据科学家的部分工作将会越来越自动化,边际成本将越来越低,从而可以极大提高生产力. 智能预测各企事业单位客户在做的事情就像B端的搜索引擎,我们用百度这样的C端工具获取我们要的信息,而企业可以通过预测服务系统搜到

《大数据日知录:架构与算法》试读

时代背景 记得CSDN之前有篇文章描写叙述了大数据成功预測了美国大选,"大数据"并不真正关心谁来当选下一届美国总统.只是全部的数据都显示:政治科学家和其它人相关人士都觉得奥巴马获得连任可能性比較大.本次的成功预言,展示了大数据强大的能量. 众所周知.企业数据本身就蕴藏着价值.可是将实用的数据与没有价值的数据进行区分看起来可能是一个棘手的问题. 显然,您所掌握的人员情况.工资表和客户记录对于企业的运转至关重要.可是其它数据也拥有转化为价值的力量.一段记录人们怎样在您的商店浏览购物的视频.

chinacloud大数据新闻

2015年大数据发展八大趋势   (0 篇回复) “数据很丰满,信息很骨感”:Sight Machine想用大数据的方法,打碎两者间的屏障   (0 篇回复) 百度携大数据"圈地"证券业 "BAT"开启互联网金融新战场   (0 篇回复) 码农的春天到了?   (0 篇回复) 浪潮大数据一体机出招 装备科研“最强大脑”   (0 篇回复) 方物软件承担国家“核高基”重大专项研发   (2 篇回复) 2013互联网大会透露的热点与新趋势   (1 篇回复) 大数据从幕

阿里巴巴天池大数据竞赛黄金联赛全面开战,全球同步报名,只为寻找最聪明的你!

阿里巴巴天池大数据竞赛黄金联赛全面开战,全球同步报名,只为寻找最聪明的你!        天池大数据竞赛是由阿里巴巴集团主办,面向全球新生代力量的高端算法竞赛.通过开放海量数据和"天池"分布式计算平台,大赛让所有参与者有机会运用其设计的算法解决各类社会生活问题和商业世界中的实际问题.特别优秀的解决方案将有机会直接上线阿里巴巴旗下各电商网站(含淘宝.天猫等)或第三方合作伙伴平台,服务中国乃至世界数以亿计的用户.        2015年天池大数据竞赛将全面升级为黄金联赛,包含三个不同场景