Elasticsearch对外分词服务实践与接入方案
1、问题引出在实际项目开发与业务应用场景中,经常会遇到统计一句话、一段文本或一篇文章词频的需求, 而词频统计的前提,首先就是要做好中文分词。 常见的中文分词方案包括: 1、IK分词——https: github com medcl elasticsearch-analysis-ik 2、结巴分词—
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、 在正常的Elasticsearch部署与系统设计阶段,通常都会提前确定分词器类型。
综合来看,借助Elasticsearch实现中文分词服务是完全可行的。
3、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}]}4、Elasticsearch Ja va接口实现
下面给出基于Jest5.3.3的接口实现示例。
/**@brief:获取分词结果接口*@param:待分词的文章/字符串*@return:不重复分词结果集(可根据实际业务场景二次开发)*@date:20180704*/public static String IK_TYPE = "ik_smart";public static Set 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 keySet = new HashSet();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;} 有了ja va接口之后,继续对外封装Restful API就会变得更加直接,也更便于在业务系统中统一调用Elasticsearch分词能力。
5、小结
充分挖掘Elasticsearch自身的分词特性,尽可能简化系统架构、提升开发效率,并优化实际业务场景,才是更高效的实践方式!
游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。
同类文章
CAD零基础入门教程:坐标输入、图层管理与基础绘图命令
本文面向CAD零基础学习者,系统讲解坐标输入、图层管理与基础绘图命令的核心用法。通过分步实操与常见问题排查,帮助新手建立精确绘图习惯,掌握规范出图的基础能力。
CAD从入门到项目交付:绘图、标注、图块与实战工作流
掌握CAD的核心在于建立“画得准、标得清、复用快、交付稳”的工作流。本文提供从环境设置、高频命令组合、标注规范、图块标准化到项目分阶段交付的完整路径,帮助初学者避免常见返工陷阱,独立完成可检查、可复用、可打印的工程图纸。
Claude Code 登录指南:个人、Teams 与企业账号区分与授权步骤
本文详细解析 Claude Code 登录前的账号类型区分方法,涵盖个人订阅、Teams 席位与企业 Enterprise 席位的授权路径差异。提供终端登录命令、环境变量排查及常见异常处理步骤,帮助用户快速完成正确授权并避免登录路径混淆。
Claude Code 文件修改前的权限模式配置与命令审批指南
本文详细介绍Claude Code在修改文件前的权限模式配置方法,包括defaultMode可选值、permissions allow与deny规则设置、多层级配置文件管理以及 status验证技巧,帮助开发者安全高效地使用AI编程助手。
Claude Code接入VS Code后先测扩展和终端命令
在VS Code中接入Claude Code后,建议优先验证扩展面板与集成终端两条入口。本文提供标准检查顺序、关键命令与常见故障排查路径,帮助你快速确认环境就绪,避免后续开发受阻。
- 热门数据榜
相关攻略
2026-09-01 16:53
2026-09-01 16:52
2026-09-01 14:27
2026-09-01 14:12
2026-09-01 14:10
2026-09-01 14:07
2026-09-01 13:55
2026-09-01 13:47
热门教程
- 游戏攻略
- 安卓教程
- 苹果教程
- 电脑教程

