要把分词器集成到elasticSearch里面,肯定先要弄到ik分词器的源码。链接如下:
http://code.google.com/p/ik-analyzer/downloads/list,可以检查到项目源码结构如图刚好集成到elasticSearch中:
集成进去之后,添加测试用例:
@Test
public void testIKAnalyzer(){
List<String> text = new ArrayList<String>();
text.add("冷眼向洋看世界");
text.add("现有的中文分词算法可分为三大类:基于字符串匹配的分词方法、基于理解的分词方法和基于统计的分词方法");
for (String currentStr : text) {
try {
StringReader myreader = new StringReader(currentStr);
IKSegmenter segmenter = new IKSegmenter(myreader, true);
Lexeme mylexeme = segmenter.next();
while (mylexeme != null) {
System.out.print(mylexeme.getLexemeText());
System.out.print("---");
mylexeme = segmenter.next();
}
System.out.println();
} catch (Exception e) {
e.printStackTrace();
}
}
}
可以得到结果:
加载扩展词典:ext.dic
加载扩展停止词典:stopword.dic
冷眼---向---洋---看---世界---
现有---中文---分词---算法---可分为---三---大类---基于---字符串---匹配---分词---方法---基于---理解---分词---方法---和---基于---统计---分词---方法---
分词效果虽然还不是那么好,只是代码在里面跑起来了。接下来就需要我们通过elasticSeratch调用分词器,对内容进行分词了。
=============================================================================================================================================================================================================================================
开发中途了解到,ik不支持词性标注。于是起了换一个分词器的想法,在聊天群里面询问之后,了解到ansj分词器很稳定,查阅文档,
http://hi.baidu.com/erliang20088/item/2c5d12198afdf9c6bf904259,主要借鉴这篇文档分词器集成成功。以下简述步骤:
1:从[url]http://maven.ansj.org/org/ansj/elasticsearch-analysis-ansj/ [/url]直接下载zip包解压到plugin目录下(我用的版本号是:elasticsearch-analysis-ansj-1.x.1),我用的源码没有plugins,直接创建一个,zip包挤压之后,把jar放进去,然后把词库放到同目录下。
2:在es下config/elasticsearch.yml 文件末尾加上以下(1)或者(2)的配置。
(1)为简洁配置,一些高级属性均采用默认,要求不高的话可采用下边配置,该处配置与参考博文是一致的。
################################## ANSJ PLUG CONFIG ################################
index:
analysis:
analyzer:
index_ansj:
type: ansj_index
query_ansj:
type: ansj_query
index.analysis.analyzer.default.type: ansj_index
(2)为高级配置,加入一些高级属性,该处配置与博文不一致,去掉了一些容易引起异常的配置。
################################## ANSJ PLUG CONFIG ################################
index:
analysis:
analyzer:
index_ansj:
alias: [ansj_index_analyzer]
type: ansj_index
is_name: false
redis:
pool:
maxactive: 20
maxidle: 10
maxwait: 100
testonborrow: true
ip: master.redis.yao.com:6379
channel: ansj_term
query_ansj:
alias: [ansj_query_analyzer]
type: ansj_query
is_name: false
redis:
pool:
maxactive: 20
maxidle: 10
maxwait: 100
testonborrow: true
ip: master.redis.yao.com:6379
channel: ansj_term
3:重启集群后,查看log输出。如果出现类似于“ansj分词器预热完毕,可以使用!”等等的字样说明加载成功,可以使用了。
4:结果检测:
(1)linux下,人们喜欢用“curl -XGET http://host:9200/[index]/_analyze?analyzer=ansj_index&text=测试用例”来测试。正常的话,会返回相应的json结果。注意其中的参数要正确,包括host、indexName、analyzer等。此处有一个es的不合理之处,要求至少要有一个indexName才可以进行这样的分词测试,这显然是不合理的。但只能如此接受了。
(2)window下,直接用浏览器中输入“http://host_ip:9200/[index_name]/_analyze?analyzer=ansj_index&text=测试用例”即可,亦会返回相应的分词结果的json格式串。
程序猿行业技术生活交流群:181287753(指尖天下),欢迎大伙加入交流学习。
- 大小: 11 KB
- 大小: 8 KB
分享到:
相关推荐
ik分词器,支持elastcisearch6.4.2的源码,如果要使用其他6.X版本的,可以在源码内修改pom.xml中的es版本号。 该源码格式也可为想自己写一个analyzer插件的朋友也可当demo参考
Elasticsearch 6.3.0 是一个高度可扩展、实时的搜索和分析引擎,它在IT领域,尤其是大数据分析和日志管理方面扮演着重要角色。作为Apache Lucene的衍生项目,Elasticsearch以其分布式、全文检索、实时性、高可用性...
24 ElastciSearch search结果解析概述1、我们如果发出一个搜索请求的话,会拿到一堆搜索结果,本节课,我们来讲解一下,这个搜索结果里的各种数据
什么类型的应用程序1)数据量较大,es的分布式本质,可以帮助你快速进行扩容,承载大量数据2)数据结构灵活多变,随时可能会变化,而且数据结构之间的关系,非常复杂,
在大数据时代,高效、可靠的监控对于任何分布式系统,特别是搜索引擎和分析平台如Elasticsearch来说至关重要。Elasticsearch作为一个强大的开源搜索和分析引擎,需要实时监控其性能和健康状况以确保稳定运行。...
默认的分析器是标准分析器,它遵循Unicode的单词边界规则,去除标点符号,并将词转化为小写。用户也可以自定义分析器,例如使用IKAnalyzer,以适应不同的分词需求。 倒排索引一旦被构建,就不再发生变化,这种不变...
ElasticSearch 是一个流行的开源搜索引擎和分析引擎,常用于大数据分析、日志聚合以及实时搜索。本教程将详细介绍在 CentOS 7.7 64位系统上安装ElasticSearch 6.8.6、Kibana 6.8.6 和 JDK 1.8.0_162 的步骤。 首先...
弹性蛋白 Elasticsearch插件,用于在密集的浮点和稀疏布尔向量上进行相似性搜索。 文献资料 如果您想为Elastiknn做出贡献,请参阅developer-... Elastiknn JSON API的Scala案例类和圆形编解码器 基于elastic4s的Elast
具有3个数据索引(主索引,系统日志和用户统计信息)的Elastcisearch服务器 Kibana用于查看数据 docker-compose.yml显示软件堆栈。 您可以使用docker-compose up -d运行堆栈。 请注意,您需要Elasticsearch索引数据...