总结 | Elasticsearch对外提供分词服务实践

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: 1、问题抛出?实战开发应用场景中,有获取一段话、一篇文章词频的业务场景,词频的前提就是分词。常用的中文分词包括:1、IK分词——https://github.com/medcl/elasticsearch-analysis-ik2、结巴分词——https://github.com/huaban/elasticsearch-analysis-jieba3、ANSJ分词——https://github.com/NLPchina/elasticsearch-analysis-ansj实际开发中,我们可以借助以上分词工具封装成接口或服务进行分词。但,有没有想过,借助Elasticsea

image.png

链接

2、可行性

1、Elasticsearch对中文的处理,倒排索引的前置条件就是中文分词。

而分词,我们常用的就是IK分词插件。

2、正常ES的部署、开发设计时候就提前选好分词器。

综上,借助Elasticsearch实现分词完全没有问题。


2、Elasticsearch中的DSL实现

GET test_index/_analyze

{

 "analyzer":"ik_smart",

 "text":"9年后,我还是没有跑出去 | 震后余生"

}

1

2

3

4

5

返回结果:


{

 "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 block

  e.printStackTrace();

 }

 

 return keySet;

}


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


4、小结

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


相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
相关文章
|
1月前
|
SQL API 索引
Superset对接ElasticSearch服务展示
Superset对接ElasticSearch服务展示
291 2
|
1月前
|
Java 关系型数据库 MySQL
Elasticsearch【问题记录 01】启动服务&停止服务的2类方法【及 java.nio.file.AccessDeniedException: xx/pid 问题解决】(含shell脚本文件)
【4月更文挑战第12天】Elasticsearch【问题记录 01】启动服务&停止服务的2类方法【及 java.nio.file.AccessDeniedException: xx/pid 问题解决】(含shell脚本文件)
113 3
|
3天前
|
存储 监控 固态存储
elasticsearch索引生命周期管理(ILM):原理和实践
elasticsearch索引生命周期管理(ILM):原理和实践
|
3天前
|
存储 JSON API
Elasticsearch中的模板:定义、作用与实践
Elasticsearch中的模板:定义、作用与实践
|
4天前
|
搜索推荐 Java 数据库
Java中的ElasticSearch集成与实践
Java中的ElasticSearch集成与实践
|
1月前
|
数据采集 数据挖掘 索引
Elasticsearch “指纹”去重机制,你实践中用到了吗?
Elasticsearch “指纹”去重机制,你实践中用到了吗?
36 7
|
1月前
|
自然语言处理 Java Shell
Elasticsearch【环境搭建 01】【elasticsearch-6.4.3 单机版】(含 安装包+分词插件 云盘资源)
【4月更文挑战第12天】Elasticsearch【环境搭建 01】【elasticsearch-6.4.3 单机版】(含 安装包+分词插件 云盘资源)
35 2
|
1月前
|
运维 监控 Java
探索Elasticsearch在Java环境下的全文检索应用实践
【4月更文挑战第17天】本文介绍了在Java环境下使用Elasticsearch实现全文检索的步骤。首先,简述了Elasticsearch的功能和安装配置。接着,通过Maven添加`elasticsearch-rest-high-level-client`依赖,创建`RestHighLevelClient`实例连接Elasticsearch。内容包括:创建/删除索引,插入/查询文档。还探讨了高级全文检索功能、性能优化和故障排查技巧。通过Elasticsearch,开发者能高效处理非结构化数据,提升应用程序价值。
|
1月前
|
自然语言处理 算法 索引
Elasticsearch 8.X 分词插件版本更新不及时解决方案
Elasticsearch 8.X 分词插件版本更新不及时解决方案
32 0
|
1月前
|
存储 自然语言处理 搜索推荐
【Elasticsearch专栏 06】深入探索:Elasticsearch如何处理倒排索引中的分词问题
Elasticsearch通过内置和可定制的分词器及过滤器处理倒排索引中的分词问题,确保文本被拆分成合适的词条并优化存储,为全文搜索等提供高效支持。用户可通过分析API测试和调整分词效果。
37 3