1、首先需要安装好Elasticsearch 和elasticsearch-analysis-ik分词器

2、配置ik同义词

Elasticsearch 自带一个名为 synonym 的同义词 filter。为了能让 IK 和 synonym 同时工作,我们需要定义新的 analyzer,用 IK 做 tokenizer,synonym 做 filter。听上去很复杂,实际上要做的只是加一段配置。

打开 /config/elasticsearch.yml 文件,加入以下配置:

  1. index:
  2. analysis:
  3. analyzer:
  4. ik_syno:
  5. type: custom
  6. tokenizer: ik_max_word
  7. filter: [my_synonym_filter]
  8. ik_syno_smart:
  9. type: custom
  10. tokenizer: ik_smart
  11. filter: [my_synonym_filter]
  12. filter:
  13. my_synonym_filter:
  14. type: synonym
  15. synonyms_path: analysis/synonym.txt

以上配置定义了 ik_syno 和 ik_syno_smart 这两个新的 analyzer,分别对应 IK 的 ik_max_word 和 ik_smart 两种分词策略。根据 IK 的文档,二者区别如下:

  • ik_max_word:会将文本做最细粒度的拆分,例如「中华人民共和国国歌」会被拆分为「中华人民共和国、中华人民、中华、华人、人民共和国、人民、人、民、共和国、共和、和、国国、国歌」,会穷尽各种可能的组合;
  • ik_smart:会将文本做最粗粒度的拆分,例如「中华人民共和国国歌」会被拆分为「中华人民共和国、国歌」;

ik_syno 和 ik_syno_smart 都会使用 synonym filter 实现同义词转换。

3、创建/config/analysis/synonym.txt 文件,输入一些同义词并存为 utf-8 格式。例如

到此同义词配置已经完成,重启ES即可,搜索时指定分词为ik_syno或ik_syno_smart。

创建Mapping映射。执行curl命令如下

  1. curl -XPOST  http://192.168.1.99:9200/goodsindex/goods/_mapping -d'{
  2. "goods": {
  3. "_all": {
  4. "enabled": true,
  5. "analyzer": "ik_max_word",
  6. "search_analyzer": "ik_max_word",
  7. "term_vector": "no",
  8. "store": "false"
  9. },
  10. "properties": {
  11. "title": {
  12. "type": "string",
  13. "term_vector": "with_positions_offsets",
  14. "analyzer": "ik_syno",
  15. "search_analyzer": "ik_syno"
  16. },
  17. "content": {
  18. "type": "string",
  19. "term_vector": "with_positions_offsets",
  20. "analyzer": "ik_syno",
  21. "search_analyzer": "ik_syno"
  22. },
  23. "tags": {
  24. "type": "string",
  25. "term_vector": "no",
  26. "analyzer": "ik_syno",
  27. "search_analyzer": "ik_syno"
  28. },
  29. "slug": {
  30. "type": "string",
  31. "term_vector": "no"
  32. },
  33. "update_date": {
  34. "type": "date",
  35. "term_vector": "no",
  36. "index": "no"
  37. }
  38. }
  39. }
  40. }'

以上代码为 test 索引下的 article 类型指定了字段特征: title 、 content 和 tags 字段使用 ik_syno 做为 analyzer,说明它使用 ik_max_word 做为分词,并且应用 synonym 同义词策略; slug 字段没有指定 analyzer,说明它使用默认分词;而 update_date 字段则不会被索引。

使用 Elasticsearch ik分词实现同义词搜索(转)的更多相关文章

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

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

  2. Elasticsearch5.3.1 IK分词,同义词/联想搜索设置

    [大数据]-Elasticsearch5.3.1 IK分词,同义词/联想搜索设置  原文地址:http://www.cnblogs.com/NextNight/p/6837407.html --题外话 ...

  3. SpringBoot整合Elasticsearch+ik分词器+kibana

    话不多说直接开整 首先是版本对应,SpringBoot和ES之间的版本必须要按照官方给的对照表进行安装,最新版本对照表如下: (官网链接:https://docs.spring.io/spring-d ...

  4. ElasticSearch ik分词安装

    1.下载对应版本的ES ik分词 https://github.com/medcl/elasticsearch-analysis-ik/releases 2.解压elasticsearch-analy ...

  5. Windows10安装Elasticsearch IK分词插件

    安装插件 cmd切换到Elasticsearch安装目录下 C:\Users\Administrator>D: D:\>cd D:\Program Files\Elastic\Elasti ...

  6. elasticsearch ik分词

    elasticsearch 默认并不支持中文分词,默认将每个中文字切分为一个词,这明显不符合我们的业务要求.这里就需要用到ik分词插件. 本文主要囊括了以下几部分,ik插件安装.ik用法介绍.自定义词 ...

  7. Elasticsearch IK分词器

    Elasticsearch-IK分词器 一.简介 因为Elasticsearch中默认的标准分词器(analyze)对中文分词不是很友好,会将中文词语拆分成一个一个中文的汉字,所以引入中文分词器-IK ...

  8. Centos7部署elasticsearch并且安装ik分词以及插件kibana

    第一步 下载对应的安装包 elasticsearch下载地址:https://www.elastic.co/cn/downloads/elasticsearch ik分词下载:https://gith ...

  9. 七、Elasticsearch+elasticsearch-head的安装+Kibana环境搭建+ik分词器安装

    一.安装JDK1.8 二.安装ES 三个节点:master.slave01.slave02 1.这里下载的是elasticsearch-6.3.1.rpm版本包 https://www.elastic ...

随机推荐

  1. Scala 递归学习的例子

    为了学习Spark,我开始了学习Scala.加油! 递归的一个题目: 代码: // Why x is Float, but when we use 3.0 for example, it return ...

  2. bzoj 3224 splay模板题4

    再刷水题我就废了... #include<iostream> #include<cstdio> #include<algorithm> #include<cs ...

  3. Leetcode Bulb Switcher

    There are n bulbs that are initially off. You first turn on all the bulbs. Then, you turn off every ...

  4. 华硕笔记本之secure boot

    在ubuntu下安装cuda的时候,一直装不好,cuda-7.5.run已经装好了,但是编译cuda的例程时失败,提示cuda的库链接不上. 初步判断是secure boot的问题,因为在开启X的情况 ...

  5. 【poj1013】 Counterfeit Dollar

    http://poj.org/problem?id=1013 (题目链接) 题意 12个硬币中有1个是假的,给出3次称重结果,判断哪个硬币是假币,并且判断假币是比真币中还是比真币轻. Solution ...

  6. 【随笔】mvc使用forms身份验证实现登陆

  7. [Noi2016十连测第三场]线段树

    #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> ...

  8. WPF弹出取消确定框

    MessageBoxResult dr = MessageBox.Show("是否在"+ConfigHelper.GetAppSetting("SourceDBName& ...

  9. crawler:简要了解一下PhantomJS

    有时,我们需要浏览器处理网页,但并不需要浏览,比如生成网页的截图.抓取网页数据等操作.PhantomJS的功能,就是提供一个浏览器环境的命令行接口,你可以把它看作一个“虚拟浏览器”,除了不能浏览,其他 ...

  10. CSS基础知识真难啊-background-渐变

    文章参考 http://www.zhangxinxu.com/wordpress/?p=727 http://www.uqu8.com/html/2014/html-css_1105/176.html ...