1、问题抛出?

实战开发应用场景中,有获取一段话、一篇文章词频的业务场景, 
词频的前提就是分词。 
常用的中文分词包括: 
1、IK分词——https://github.com/medcl/elasticsearch-analysis-ik 
2、结巴分词——https://github.com/huaban/elasticsearch-analysis-jieba 
3、ANSJ分词——https://github.com/NLPchina/elasticsearch-analysis-ansj 
实际开发中,我们可以借助以上分词工具封装成接口或服务进行分词。 
但,有没有想过,借助Elasticsearch的分词插件直接实现分词呢并对外提供服务呢?

2、可行性

1、Elasticsearch对中文的处理,倒排索引的前置条件就是中文分词。 
而分词,我们常用的就是IK分词插件。 
2、正常ES的部署、开发设计时候就提前选好分词器。 
综上,借助Elasticsearch实现分词完全没有问题。

2、Elasticsearch中的DSL实现

GET test_index/_analyze
{"analyzer":"ik_smart","text":"9年后,我还是没有跑出去 | 震后余生"
}

返回结果:

{"tokens": [{"token": "9","start_offset": 0,"end_offset": 1,"type": "ARABIC","position": 0},{"token": "年后","start_offset": 1,"end_offset": 3,"type": "CN_WORD","position": 1},{"token": "我","start_offset": 4,"end_offset": 5,"type": "CN_WORD","position": 2},{"token": "还是","start_offset": 5,"end_offset": 7,"type": "CN_WORD","position": 3},{"token": "没有","start_offset": 7,"end_offset": 9,"type": "CN_WORD","position": 4},{"token": "跑出去","start_offset": 9,"end_offset": 12,"type": "CN_WORD","position": 5},{"token": "震后","start_offset": 15,"end_offset": 17,"type": "CN_WORD","position": 6},{"token": "余生","start_offset": 17,"end_offset": 19,"type": "CN_WORD","position": 7}]
}

3、Elasticsearch Java接口实现

以下是基于Jest5.3.3的接口实现。

/*
*@brief:获取分词结果接口
*@param:待分词的文章/字符串
*@return:不重复分词结果集(可根据实际业务场景二次开发)
*@date:20180704
*/
public static String IK_TYPE = "ik_smart";
public static Set<String> getIkAnalyzeSearchTerms(String searchContent) {    // 调用 IK 分词分词JestClient client = JestHelper.getClient();Analyze ikAnalyze = new Analyze.Builder().index(TEST_INDEX).analyzer(IK_TYPE).text(searchContent).build();JestResult result = null;Set<String> keySet = new HashSet<String>();try {result = client.execute(ikAnalyze);JsonArray jsonArray = result.getJsonObject().getAsJsonArray("tokens");int arraySize = jsonArray.size();for (int i = 0; i < arraySize; ++i) {JsonElement curKeyword = jsonArray.get(i).getAsJsonObject().get("token");//Logger.info("rst = " + curKeyword.getAsString());keySet.add(curKeyword.getAsString());}} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}return keySet;}

有了java接口,对外提供Restful API就变得相对简单了。

4、小结

充分挖据Elasticsearch自身特性,优化、简化业务场景才是王道!

Elasticsearch对外提供分词服务实践相关推荐

  1. 【Elasticsearch】 Elasticsearch对外提供分词服务实践

    1.概述 转载:总结 | Elasticsearch对外提供分词服务实践 2. 问题抛出? 实战开发应用场景中,有获取一段话.一篇文章词频的业务场景, 词频的前提就是分词. 常用的中文分词包括: IK ...

  2. 对外提供dubbo服务的最佳实践

    为什么80%的码农都做不了架构师?>>>    模块介绍 share 所有需要对外开放的接口定义以及DTO client 对外提供的jar包, 需要调用本项目dubbo服务的应用, ...

  3. 家用移动光猫(型号:HS8545M5)利用公网ipv6对外提供公网服务。(100M的宽带,真香 )

    因为家里有空闲电脑,并且家里的移动宽带是100M. 想着自己的阿里云服务器才5M的带宽,这简直不是一个档次,阿里云服务器网速640k/s上限. 640k/s*20倍就相当于12M/s的网速.(太香了) ...

  4. 海量服务实践──手 Q 游戏春节红包项目设计与总结(上篇)

    导语 大哥说,今年手Q游戏的春节红包你来做.那该怎么做?以及怎么做才能让大哥放心?本文从后台的角度出发讲述了这个过程和方法,对于关键的前台部分也有所涉及. 目录 1.需求背景 1.1.红包类别 1.2 ...

  5. 6月20日云栖精选夜读丨国内首家!阿里云宣布全面提供IPv6服务

    IPv6作为下一代互联网的技术基础,对物联网.车联网.人工智能等新兴产业的发展有着重大影响.6月20日,中国云计算的领头羊阿里云宣布联合三大运营商全面对外提供IPv6服务,希望能在2025年前帮助中国 ...

  6. 【每日新闻】阿里云成中国唯一全面提供IPv6服务 | 区块链技术可以促进数据的共享以改进流程...

    点击关注中国软件网 最新鲜的企业级干货聚集地 趋势洞察 2018中国软件生态大会暨第十一届中国软件渠道大会首站在北京.天津.太原.郑州.济南站成功举行,同时拉开了覆盖上海.深圳.成都.西安等全国16个 ...

  7. zookeeper集群,每个服务器上的数据是相同的,每一个服务器均可以对外提供读和写的服务,这点和redis是相同的,即对客户端来讲每个服务器都是平等的。...

    zookeeper集群,每个服务器上的数据是相同的,每一个服务器均可以对外提供读和写的服务,这点和redis是相同的,即对客户端来讲每个服务器都是平等的.

  8. 5.frp对外提供简单的文件访问服务

    通过 static_file 插件可以对外提供一个简单的基于 HTTP 的文件访问服务.类似于http的文件索引! 服务端frps.ini配置 [common] bind_addr = 0.0.0.0 ...

  9. 微软云平台媒体服务实践系列 2- 使用动态封装为iOS, Android , Windows 等多平台提供视频点播(VoD)方案...

    文章微软云平台媒体服务实践系列 1- 使用静态封装为iOS, Android 设备实现点播(VoD)方案  介绍了如何针对少数iOS, Android 客户端的场景,出于节约成本的目的使用媒体服务的静 ...

最新文章

  1. 江苏自学考试计算机网络专业,速看,江苏自考本科计算机网络专业介绍
  2. 40张最全计算机网络基础思维导图
  3. 基于内容推荐系统中的常识
  4. 【转】 JMeter学习(二十四)linux启动jmeter,执行./jmeter.sh报错解决方法
  5. 基于SpringBoot的答题系统
  6. 关于Apache的25个初中级面试题
  7. python 网络拓扑图_python 网络拓扑图
  8. 微软bi报表服务器,为 Power BI 报表服务器创建 Power BI 报表
  9. 报错:Warning: To load an ES module, set “type“: “module“ in the package.json or use the .mjs extension
  10. 粥 淡薄之中滋味长
  11. 云e办(后端)——项目介绍及搭载项目
  12. shell脚本检查域名证书是否过期
  13. Gitosis不能拉取代码,报错 ERROR:gitosis.serve.main:Repository read access denied fatal
  14. java -正则表达式(是否含有特殊字符,英文或者数字)
  15. 11个你不应该错过的JavaScript库
  16. 安科瑞电气火灾监控系统对分散在建筑内的探测器进行遥测、遥调、遥控、遥信,方便实现监控与管理。
  17. css animate动画demo
  18. 寒假之视频压缩笔记——FPGA视频拼接器的画中画和 视频窗口漫游功能分析
  19. python: datetime包,获得当前日期时间
  20. 如何从业余爱好者自学进阶成专业开发者

热门文章

  1. python列表的内置方法_Python内置方法详解
  2. is running beyond the ‘VIRTUAL‘ memory limit. Current usage: 123.5 MB of 1 GB physical memory used
  3. MiniGUI开发环境搭建全记录(嵌入式计X86)
  4. unicode编码转ascii编码
  5. 崩坏三x86架构闪退_不给X86留活路?苹果下一代M系列芯片竟然这么强
  6. left join on多表关联_资深DBA整理MySQL基础知识三:迅速理解MySQL的关联和子查询...
  7. 分度值1g是什么意思_都什么年代了,还有人在 MySQL 索引上碰一鼻子灰?
  8. 大学生创业交流会计算机二级,我校召开第三届“互联网+”大学生创新创业大赛选题交流讨论会...
  9. 计算机与材料化学应用背景介绍,计算机在材料工程中的应用.ppt
  10. 计算机技术大神,2017考研:计算机科学与技术学科大神给你的套路