总结 | 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可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
相关文章
|
2月前
|
自然语言处理 大数据 应用服务中间件
大数据-172 Elasticsearch 索引操作 与 IK 分词器 自定义停用词 Nginx 服务
大数据-172 Elasticsearch 索引操作 与 IK 分词器 自定义停用词 Nginx 服务
68 5
|
2月前
|
自然语言处理 Java 网络架构
elasticsearch学习三:elasticsearch-ik分词器的自定义配置 分词内容
这篇文章是关于如何自定义Elasticsearch的ik分词器配置以满足特定的中文分词需求。
145 0
elasticsearch学习三:elasticsearch-ik分词器的自定义配置 分词内容
|
2月前
|
JSON Java 网络架构
elasticsearch学习四:使用springboot整合 rest 进行搭建elasticsearch服务
这篇文章介绍了如何使用Spring Boot整合REST方式来搭建和操作Elasticsearch服务。
136 4
elasticsearch学习四:使用springboot整合 rest 进行搭建elasticsearch服务
|
1月前
|
测试技术 API 开发工具
ElasticSearch的IK分词器
ElasticSearch的IK分词器
49 7
|
2月前
|
自然语言处理 Java Maven
elasticsearch学习二:使用springboot整合TransportClient 进行搭建elasticsearch服务
这篇博客介绍了如何使用Spring Boot整合TransportClient搭建Elasticsearch服务,包括项目创建、Maven依赖、业务代码和测试示例。
119 0
elasticsearch学习二:使用springboot整合TransportClient 进行搭建elasticsearch服务
|
2月前
|
存储 JSON Java
elasticsearch学习一:了解 ES,版本之间的对应。安装elasticsearch,kibana,head插件、elasticsearch-ik分词器。
这篇文章是关于Elasticsearch的学习指南,包括了解Elasticsearch、版本对应、安装运行Elasticsearch和Kibana、安装head插件和elasticsearch-ik分词器的步骤。
190 0
elasticsearch学习一:了解 ES,版本之间的对应。安装elasticsearch,kibana,head插件、elasticsearch-ik分词器。
|
2月前
|
消息中间件 监控 关系型数据库
MySQL数据实时同步到Elasticsearch:技术深度解析与实践分享
在当今的数据驱动时代,实时数据同步成为许多应用系统的核心需求之一。MySQL作为关系型数据库的代表,以其强大的事务处理能力和数据完整性保障,广泛应用于各种业务场景中。然而,随着数据量的增长和查询复杂度的提升,单一依赖MySQL进行高效的数据检索和分析变得日益困难。这时,Elasticsearch(简称ES)以其卓越的搜索性能、灵活的数据模式以及强大的可扩展性,成为处理复杂查询需求的理想选择。本文将深入探讨MySQL数据实时同步到Elasticsearch的技术实现与最佳实践。
138 0
|
3月前
|
存储 自然语言处理 关系型数据库
ElasticSearch基础3——聚合、补全、集群。黑马旅游检索高亮+自定义分词器+自动补全+前后端消息同步
聚合、补全、RabbitMQ消息同步、集群、脑裂问题、集群分布式存储、黑马旅游实现过滤和搜索补全功能
ElasticSearch基础3——聚合、补全、集群。黑马旅游检索高亮+自定义分词器+自动补全+前后端消息同步
|
29天前
|
存储 安全 数据管理
如何在 Rocky Linux 8 上安装和配置 Elasticsearch
本文详细介绍了在 Rocky Linux 8 上安装和配置 Elasticsearch 的步骤,包括添加仓库、安装 Elasticsearch、配置文件修改、设置内存和文件描述符、启动和验证 Elasticsearch,以及常见问题的解决方法。通过这些步骤,你可以快速搭建起这个强大的分布式搜索和分析引擎。
40 5
|
3月前
|
NoSQL 关系型数据库 Redis
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo
mall在linux环境下的部署(基于Docker容器),docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongodb、minio详细教程,拉取镜像、运行容器
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo