ElasticSearch 中文同义词实现

https://blog.csdn.net/xsdxs/article/details/52806499

参考以下两个网址,但运行报错,以下是我自己改进方式和使用总结。
https://github.com/medcl/elasticsearch-analysis-ik/issues/93
http://elasticsearch.cn/?/question/29
本文前提默认已经装好ES和IK插件。

1:elasticserach.yml 最后一行添加如下内容(该文件位于elasticsearch-x.x.x/config目录下):
index.analysis.analyzer.default.type: ik

2:在elasticsearch-x.x.x/config目录下新建同义词文件synonyms.txt。
其中,synonyms.txt 编码格式为’utf-8’,内容建议为空。

3:创建索引

curl -XPUT localhost:9200/test -d'
{
"settings": {
"index": {
"analysis": {
"analyzer": {
"jt_cn": {
"type": "custom",
"use_smart": "true",
"tokenizer": "ik_smart",
"filter": ["jt_tfr","jt_sfr"],
"char_filter": ["jt_cfr"]
},
"ik_smart": {
"type": "ik",
"use_smart": "true"
},
"ik_max_word": {
"type": "ik",
"use_smart": "false"
}
},
"filter": {
"jt_tfr": {
"type": "stop",
"stopwords": [" "]
},
"jt_sfr": {
"type": "synonym",
"synonyms_path": "synonyms.txt"
}
},
"char_filter": {
"jt_cfr": {
"type": "mapping",
"mappings": [
"| => \|"
]
}
}
}
}
}
}'
4:创建映射

curl -X PUT localhost:9200/test/haizhi/_mapping -d '{
"haizhi": {
"properties": {
"title": {
"include_in_all": true,
"analyzer": "jt_cn",
"term_vector": "with_positions_offsets",
"boost": 8,
"store": true,
"type": "string"
}
}
}
}'

5:插入数据

curl -XPUT localhost:9200/test/haizhi/1 -d '{
"title": "番茄"
}'
curl -XPUT localhost:9200/test/haizhi/2 -d '{
"title": "西红柿"
}'
curl -XPUT localhost:9200/test/haizhi/3 -d '{
"title": "我是西红柿"
}'
curl -XPUT localhost:9200/test/haizhi/4 -d '{
"title": "我是番茄"
}'
curl -XPUT localhost:9200/test/haizhi/5 -d '{
"title": "土豆"
}'
curl -XPUT localhost:9200/test/haizhi/6 -d '{
"title": "aa"
}'
6:查询1

curl -XPOST 'localhost:9200/test/haizhi/_search?pretty' -d '
{
"query": {
"match_phrase": {
"title": {
"query": "西红柿",
"analyzer": "jt_cn"
}
}
},
"highlight": {
"pre_tags": [
"",
""
],
"post_tags": [
"",
""
],
"fields": {
"title": {}
}
}
}'
结果如下
这里写图片描述
7:查询2
我们知道“西红柿”和“番茄”是同义词,我们在同义词词典(synonyms.txt)中添加如下内容,并重启ES,再用第6步的查询。

Example:

西红柿, 番茄

结果如下,成功匹配同义词
这里写图片描述
8:查询3
修改同义词词典(synonyms.txt)为如下内容,重启ES。

Example:

西红柿, 番茄
超级土豆, 土豆

查询如下:

curl -XPOST 'localhost:9200/test/haizhi/_search?pretty' -d '
{
"query": {
"match_phrase": {
"title": {
"query": "超级土豆",
"analyzer": "jt_cn"
}
}
}
}'

结果如下,查不到结果
这里写图片描述
9:查询4
在{plugins}/elasticsearch-analysis-ik-*/config/custom/mydict.dic词典中新加“超级土豆”一词,并且重启ES。

  • 结果如下,成功用“超级土豆”搜索到“土豆”一词
    这里写图片描述

10:小结

同义词字典或是IK用户自定义词典更新,必须每次重启elasticsearch才有效。
同义词词对是必须能被完成切分的词语。
比如在synonyms.txt 文件中增加同义词对: ‘超级土豆’ – ‘土豆’ 。但在实际的搜索中用“超级土豆”是搜不到“土豆”的。因为“超级土豆”会被切分为多个词语。必须在{plugins}/elasticsearch-analysis-ik-*/config/custom/mydict.dic词典中新加“超级土豆”一词,才能用“超级土豆”一词搜出“土豆”。

ES 1.7安装ik分词elasticsearch-analysis-ik-1.2.5中文同义词实现的更多相关文章

  1. windows 环境下安装elasticsearch ,ik,head,marvel

    elasticsearch  自带的中分分词器将会使中文分成一个一个的单词,需要安装ik分词等,ik分词分为 ik_smart(粗粒度分词),ik_max_word(细粒度分词)两种模式. 1:首先安 ...

  2. elasticsearch 拼音+ik分词,spring data elasticsearch 拼音分词

    elasticsearch 自定义分词器 安装拼音分词器.ik分词器 拼音分词器: https://github.com/medcl/elasticsearch-analysis-pinyin/rel ...

  3. Windows下安装Elasticsearch6.4.1和Head,IK分词器

    所需运行环境 1.安装jdk1.8(步骤略) 2.安装git(步骤略)3.安装nodejs(步骤略) 一.ElasticSearch的安装 下载elasticsearch6.4.1,将下载后的es解压 ...

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

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

  5. Elastic Stack 笔记(二)Elasticsearch5.6 安装 IK 分词器和 Head 插件

    博客地址:http://www.moonxy.com 一.前言 Elasticsearch 作为开源搜索引擎服务器,其核心功能在于索引和搜索数据.索引是把文档写入 Elasticsearch 的过程, ...

  6. [Linux]Linux下安装和配置solr/tomcat/IK分词器 详细实例二.

    为了更好的排版, 所以将IK分词器的安装重启了一篇博文,  大家可以接上solr的安装一同查看.[Linux]Linux下安装和配置solr/tomcat/IK分词器 详细实例一: http://ww ...

  7. Elasticsearch之文档的增删改查以及ik分词器

    文档的增删改查 增加文档 使用elasticsearch-head查看 修改文档 使用elasticsearch-head查看 删除文档 使用elasticsearch-head查看 查看文档的三种方 ...

  8. IK 分词器

    目录 IK 分词器-介绍 IK 分词器-安装 环境准备:Maven 安装 IK 分词器 IK 分词器-使用 IK 分词器-介绍 现有问题:ES 默认对中文分词并不友好,实际上是把中文进行了每个字的分词 ...

  9. 4、1 IK分词器

    我们在浏览器地址栏输入 http://127.0.0.1:9200/_analyze?analyzer=chinese&pretty=true&text=我是程序员 默认的中文分词是将 ...

  10. Solr——配置IK分词器

    首先需要的准备好jdk1.8和tomcat8以及ik分词器(ik分词器是5.x的版本,和solr4.10搭配的版本不一样,虽然是5.x的版本但是也是能使用在solr7.2版本上的) 分享链接https ...

随机推荐

  1. bootstrap模态框传值操作

    1.bootstrap模态框之html代码 <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"& ...

  2. DevOps - 项目构建 - Maven

    Maven介绍Apache Maven是一个创新的软件项目管理和综合工具.Maven提供了一个基于项目对象模型(POM)文件的新概念来管理项目的构建,可以从一个中心资料片管理项目构建,报告和文件.Ma ...

  3. web3.js_1.x.x--API(二)/合约部署与事件调用

    web3.js_1.x.x的使用和网上查到的官方文档有些不同,我对经常使用到的API进行一些整理,希望能帮到大家 转载博客:http://www.cnblogs.com/baizx/p/7474774 ...

  4. 什么是token及怎样生成token

    什么是token Token是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个Token便将此Token返回给客户端,以后客户端只需带上这个Token前来请求数据即 ...

  5. WinForm webbrowser控件的使用

    webbrowser是一个比较实用的工具,主要用于在winform窗体中嵌入浏览器,达到winform与webform互操作的目的. 先上一个demo,看一下能实现什么效果. private void ...

  6. wamp环境下安装imagick扩展

    先上图,如下是安装成功后的phpinfo()界面: 安装步骤: 1.先确定安装版本,比如我的的php : php7.0.12  x86 ts 那么就需要三方版本 要一致:imagick软件本身( 如x ...

  7. java 第三章 流程控制语句

    1.条件语句 (1)if 语句 ( 单一条件) if (表达式){ 执行语句块 } (2)执行流程 · if 语句 条件表达式可以是任何一种逻辑表达式   如果表达式值为true,则执行花括号的内容后 ...

  8. 第6模块 web框架口述题

    状态码如200 OK,以3位数字和原因 成.数字中的 一位指定了响应 别,后两位无分 .响应 别有以下5种. 重定向:客户端像服务器端发送请求,服务器告诉客户端你去重定向(状态码302,响应头loca ...

  9. 详解jQuery中 .bind() vs .live() vs .delegate() vs .on() 的区别

    转载自:http://zhuzhichao.com/2013/12/differences-between-jquery-bind-vs-live/ 我见过很多开发者很困惑关于jQuery中的.bin ...

  10. elasticsearch 拼音+ik分词,spring data elasticsearch 拼音分词

    elasticsearch 自定义分词器 安装拼音分词器.ik分词器 拼音分词器: https://github.com/medcl/elasticsearch-analysis-pinyin/rel ...