安装elasticsearch及中文IK和近义词配置

安装java环境

java环境是elasticsearch安装必须的

yum install java-1.8.0-openjdk

安装elasticsearch

其实es的安装非常简单了

https://www.elastic.co/downloads/elasticsearch
cd /tmp
wget https://download.elastic.co/elasticsearch/elasticsearch/elasticsearch-1.7.1.tar.gz
tar -xf elasticsearch-1.7.1.tar.gz
mv /tmp/elasticsearch-1.7.1 /usr/local/
ln -s /usr/local/elasticsearch-1.7.1 /usr/local/elasticsearch

安装head插件

head插件让我们能更简单管理elasticsearch

cd /usr/local/elasticsearch
./bin/plugin --install mobz/elasticsearch-head

访问 http://192.168.33.10:9200/_plugin/head/ 可以访问

安装IK插件

去rtf项目中获取对应插件,建议别去自己找plugin下,medcl大已经为我们准备好了一切

cd /tmp
wget https://github.com/medcl/elasticsearch-rtf/archive/master.zip
unzip elasticsearch-rtf-master.zip
cd elasticsearch-rtf-master
cp -rf config/ik /usr/local/elasticsearch/config/
cp -rf plugins/analysis-ik /usr/local/elasticsearch/plugins/ vim /usr/local/elasticsearch/config/elasticsearch.yml
增加:
index:
analysis:
analyzer:
ik:
alias: [ik_analyzer]
type: org.elasticsearch.index.analysis.IkAnalyzerProvider
ik_max_word:
type: ik
use_smart: false
ik_smart:
type: ik
use_smart: true

配置近义词

近义词组件已经是elasticsearch自带的了,所以不需要额外安装插件,但是想要让近义词和IK一起使用,就需要配置自己的分析器了。

首先创建近义词文档

在config目录下

mkdir analysis
vim analysis/synonym.txt 编辑: i-pod, i pod, i pad => ipod,
sea biscuit, sea biscit => seabiscuit,
中文,汉语,汉字

这里可以看到近义词的写法有两种:

a,b => c
a,b,c

第一种在分词的时候,a,b都会解析成为c,然后把c存入索引中

第二种在分词的时候,有a的地方,都会解析成a,b,c,把a,b,c存入索引中

第一种方法相比之下有个主词,比较省索引。

配置elasticsearch.yml中的自定义索引,和前面的ik结合,可以这么设置:

index:
analysis:
analyzer:
ik:
alias: [ik_analyzer]
type: org.elasticsearch.index.analysis.IkAnalyzerProvider
ik_max_word:
type: ik
use_smart: false
ik_smart:
type: ik
use_smart: true
my_synonyms:
tokenizer: standard
ik_syno:
type: custom
tokenizer: ik
filter: [my_synonym_filter]
ik_syno_smart:
type: custom
tokenizer: ik
filter: [my_synonym_filter]
use_smart: true
filter:
my_synonym_filter:
type: synonym
synonyms_path: analysis/synonym.txt

上面的配置文件创建了一个filter: my_synonym_filter, 然后创建了两个自定义analyzer: ik_syno和ik_syno_smart

启动elasticsearch:

bin/elasticsearch

案例测试

按照上面的配置,我们使用一个具体的句子进行测试:

120.55.72.158:9700/elasticsearchtest2

{

"index" : {

"analysis" : {

"analyzer" : {

"ik_syno" : {

"tokenizer" : "ik",

"filter" : ["my_synonym_filter"]

}

}

}

}

}

curl -XPOST "192.168.33.10:9200/elasticsearchtest/_analyze?analyzer=ik_syno" -d 'we are eng man i pad 汉语文字'

返回json结构:

{
"tokens": [
{
"token": "we",
"start_offset": 0,
"end_offset": 2,
"type": "ENGLISH",
"position": 1
},
{
"token": "eng",
"start_offset": 7,
"end_offset": 10,
"type": "ENGLISH",
"position": 2
},
{
"token": "man",
"start_offset": 11,
"end_offset": 14,
"type": "ENGLISH",
"position": 3
},
{
"token": "ipod",
"start_offset": 15,
"end_offset": 20,
"type": "SYNONYM",
"position": 4
},
{
"token": "中文",
"start_offset": 21,
"end_offset": 23,
"type": "SYNONYM",
"position": 5
},
{
"token": "汉语",
"start_offset": 21,
"end_offset": 23,
"type": "SYNONYM",
"position": 5
},
{
"token": "汉字",
"start_offset": 21,
"end_offset": 23,
"type": "SYNONYM",
"position": 5
},
{
"token": "文字",
"start_offset": 23,
"end_offset": 25,
"type": "CN_WORD",
"position": 6
}
]
}

这里就可以看到我们之前配置的东西都成功了:

  • are字被过滤,是由于are字是stop_words
  • i pad这个词语被转化为了ipod是由于近义词字典中我们设置了 i pad=>ipod
  • “文字”两个中文字是被分成一个中文词切割,是因为ik的默认main.dic里面有文字两个字
  • “中文”“汉字”“汉语”三个词出现是由于近义词字典中我们设置了这三个为同等级的近义词

安装elasticsearch及中文IK和近义词配置的更多相关文章

  1. 安装elasticsearch-1.7.1及中文IK和近义词配置

    安装elasticsearch及中文IK和近义词配置 https://www.cnblogs.com/yjf512/p/4789239.html 安装elasticsearch及中文IK和近义词配置 ...

  2. 【中文同义词近义词】词向量 vs 同义词近义词库

    方案一:利用预训练好的词向量模型 优点: (1)能把词进行语义上的向量化(2)能得到词与词的相似度 缺点: (1)词向量的效果和语料库的大小和质量有较大的关系(2)用most_similar() 得到 ...

  3. python 近义词库包 synonyms 的使用

    最近接触到nlp的一些东西,需要找出中文词语的近义词,也接触到了一个synonyms 的库, 分词,去停用词,word2vector  等 一些列nlp 的操作,还可以输出中文词语的近义词 https ...

  4. 基于WordNet的英文同义词、近义词相似度评估及代码实现

    源码地址:https://github.com/XBWer/WordSimilarity 1.确定要解决的问题及意义 在基于代码片段的分类过程中,由于程序员对数据变量名的选取可能具有一定的规范性,在某 ...

  5. docker 安装ElasticSearch的中文分词器IK

    首先确保ElasticSearch镜像已经启动 安装插件 方式一:在线安装 进入容器 docker exec -it elasticsearch /bin/bash 在线下载并安装 ./bin/ela ...

  6. linux(centos 7)下安装elasticsearch 5 的 IK 分词器

    (一)到IK 下载 对应的版本(直接下载release版本,避免mvn打包),下载后是一个zip压缩包 (二)将压缩包上传至elasticsearch 的安装目录下的plugins下,进行解压,运行如 ...

  7. 【HICP Gauss】数据库 数据库管理(存储过程 函数 对象 近义词 触发器 事务类型)-9

    存储过程存储过程在大新数据库系统中,一组为了完成特定功能的SQL语句集 存储在SQL数据库中 优势: SQL进行封装 调用方便             存储过程会进行编译 提升用户执行SQL语句集的速 ...

  8. Helm3 安装 ElasticSearch & Kibana 7.x 版本

    文章转载自:http://www.mydlq.club/article/13/ 系统环境: helm 版本:v3.2.1 Kubernetes 版本:1.18.3 ElasticSearch Char ...

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

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

随机推荐

  1. sass中级语法

    github地址:https://github.com/lily1010/sass/tree/master/course02 用到的sass语法是: sass --watch test.scss:te ...

  2. 给 admin 新建的 hdfs 文件的权限

    su hdfs hdfs dfs -chown -R admin /   org.apache.hadoop.security.AccessControlException: Permission d ...

  3. Java虚拟机6:内存溢出和内存泄露、并行和并发、Minor GC和Full GC、Client模式和Server模式的区别

    前言 之前的文章尤其是讲解GC的时候提到了很多的概念,比如内存溢出和内存泄露.并行与并发.Client模式和Server模式.Minor GC和Full GC,本文详细讲解下这些概念的区别. 内存溢出 ...

  4. 冲刺阶段 day 14

    项目进展 经过这几个星期的努力,我们已经完成了我们的软件工程项目,经过多次测试,项目已经可以准确无误地运行. 存在问题 测试期间,未发现问题. 心得体会 在这几个星期的努力下,我们终于完成了我们预期的 ...

  5. Android多线程分析之三:Handler,Looper的实现

    Android多线程分析之三:Handler,Looper的实现 罗朝辉 (http://www.cnblogs.com/kesalin/) CC 许可,转载请注明出处 在前文<Android多 ...

  6. iphone按home键后,正在运行的程序是否退出了呢?

    是否一直有个疑问,当iphone手机正在运行一个APP,如果按Home键后,那么原来正在运行的程序还在运行吗?如果开发过ios程序,可能不是问题,如果没有开发过的,可能会疑惑了,我就简单的说一下.以几 ...

  7. 自制Unity小游戏TankHero-2D(1)制作主角坦克

    自制Unity小游戏TankHero-2D(1)制作主角坦克 我在做这样一个坦克游戏,是仿照(http://game.kid.qq.com/a/20140221/028931.htm)这个游戏制作的. ...

  8. Office 2016 正式发布——新特性预览

    今天微软又发生了一件大事!Windows Office 2016正式发布,这标志着Windows Office 又达到了一个新的里程碑! 全新的Office 发布为Office 365 用户带来了新的 ...

  9. XCode v8.11 重量级分表分库(无视海量数据)

    XCode天生就有分表分库功能,设计于2005年!历时9年,这是分表分库功能第一次针对性正式更新. 在XCode里面,分表分库非常简单,在操作数据(查询/更新)前修改Meta.ConnName/Met ...

  10. jq里延迟对象Deferred,状态变化后,会一直保持

    var defer = $.Deferred(); defer.resolve('abc'); defer.done(function (data) { console.log(data); }) d ...