elasticseach默认所有分词解析器对中文都不友好,我们开发建议用Ik分词;
IK Analyzer是一个开源的,基于java语言开发的轻量级的中文分词工具包。从2006年12月推出1.0版开始, IKAnalyzer已经推出了3个大版本。最初,它是以开源项目Luence为应用主体的,结合词典分词和文法分析算法的中文分词组件。新版本的IK Analyzer 3.0则发展为面向Java的公用分词组件,独立于Lucene项目,同时提供了对Lucene的默认优化实现。
首先大伙要安装下elasticseach (安装的版本有要求,具体往下看)请参考:http://blog.java1234.com/blog/articles/343.html
ik主页我们看下 https://github.com/medcl/elasticsearch-analysis-ik
这里就有要求了,ik对应了es版本,我们要整合ik,要用对应的es版本,否则可能会有奇葩问题。
最近我的项目里,用的是es6.3.0,Ik对应的版本是6.3.0
IK version | ES version |
---|---|
master | 6.x -> master |
6.3.0 | 6.3.0 |
6.2.4 | 6.2.4 |
6.1.3 | 6.1.3 |
5.6.8 | 5.6.8 |
5.5.3 | 5.5.3 |
5.4.3 | 5.4.3 |
5.3.3 | 5.3.3 |
5.2.2 | 5.2.2 |
5.1.2 | 5.1.2 |
1.10.6 | 2.4.6 |
1.9.5 | 2.3.5 |
1.8.1 | 2.2.1 |
1.7.0 | 2.1.1 |
1.5.0 | 2.0.0 |
1.2.6 | 1.0.0 |
1.2.5 | 0.90.x |
1.1.3 | 0.20.x |
1.0.0 | 0.16.2 -> 0.19.0 |
optional 1 - download pre-build package from here: https://github.com/medcl/elasticsearch-analysis-ik/releases
create plugin folder cd your-es-root/plugins/ && mkdir ik
unzip plugin to folder your-es-root/plugins/ik
optional 2 - use elasticsearch-plugin to install ( supported from version v5.5.1 ):
./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.3.0/elasticsearch-analysis-ik-6.3.0.zip
NOTE: replace 6.3.0
to your own elasticsearch version
两种安装方式 ,第一种原始点,下载解压;第二种简单方便;我们用第二种;
安装后,plugins下,会有一个analysis-ik目录,目录下有jar包和配置文件
然后我们重启es;
我们还得安装下head插件:http://blog.java1234.com/blog/articles/355.html
ik分词有两种ik_smart , ik_max_word,强烈建议用后者ik_max_word 适合商用,分词结果很多,提高命中率;
测试:
创建index索引 put http://localhost:9200/index
创建映射 post http://localhost:9200/index/fulltext/_mapping
{
"properties": {
"content": {
"type": "text",
"analyzer": "ik_max_word",
"search_analyzer": "ik_max_word"
}
}
}
索引几个文档
post http://localhost:9200/index/fulltext/1
{"content":"美国留给伊拉克的是个烂摊子吗"}
post http://localhost:9200/index/fulltext/2
{"content":"公安部:各地校车将享最高路权"}
post http://localhost:9200/index/fulltext/3
{"content":"中韩渔警冲突调查:韩警平均每天扣1艘中国渔船"}
post http://localhost:9200/index/fulltext/4
{"content":"中国驻洛杉矶领事馆遭亚裔男子枪击 嫌犯已自首"}
然后我们来搜索测试:
post http://localhost:9200/index/fulltext/_search/
{
"query" : { "match" : { "content" : "中国嫌犯" }},
"highlight" : {
"pre_tags" : ["<tag1>", "<tag2>"],
"post_tags" : ["</tag1>", "</tag2>"],
"fields" : {
"content" : {}
}
}
}
查询的时候也进行了分词 以及对索引的分词结果 进行分词检索,然后提取结果。
欢迎扫码关注Java1234微信公众号,一起学习Java
上一篇:Java新人推荐学习书籍
下一篇:百度云搜索引擎纯爬虫版即将发布