热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

开发笔记:ElasticsearchElasticsearch对外提供分词服务实践

篇首语:本文由编程笔记#小编为大家整理,主要介绍了ElasticsearchElasticsearch对外提供分词服务实践相关的知识,希望对你有一定的参考价值。

篇首语:本文由编程笔记#小编为大家整理,主要介绍了Elasticsearch Elasticsearch对外提供分词服务实践相关的知识,希望对你有一定的参考价值。






在这里插入图片描述


1.概述

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


2. 问题抛出?

实战开发应用场景中,有获取一段话、一篇文章词频的业务场景,
词频的前提就是分词。
常用的中文分词包括:


  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实现分词完全没有问题。


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
}
]
}

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 &#61; JestHelper.getClient();
Analyze ikAnalyze &#61; new Analyze.Builder()
.index(TEST_INDEX)
.analyzer(IK_TYPE)
.text(searchContent)
.build();

JestResult result &#61; null;
Set<String> keySet &#61; new HashSet<String>();
try {
result &#61; client.execute(ikAnalyze);
JsonArray jsonArray &#61; result.getJsonObject().getAsJsonArray("tokens");
int arraySize &#61; jsonArray.size();
for (int i &#61; 0; i < arraySize; &#43;&#43;i) {
JsonElement curKeyword &#61; jsonArray.get(i).getAsJsonObject().get("token");
//Logger.info("rst &#61; " &#43; curKeyword.getAsString());
keySet.add(curKeyword.getAsString());
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

return keySet;
}





推荐阅读
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • 开发笔记:Java是如何读取和写入浏览器Cookies的
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Java是如何读取和写入浏览器Cookies的相关的知识,希望对你有一定的参考价值。首先我 ... [详细]
  • Java程序设计第4周学习总结及注释应用的开发笔记
    本文由编程笔记#小编为大家整理,主要介绍了201521123087《Java程序设计》第4周学习总结相关的知识,包括注释的应用和使用类的注释与方法的注释进行注释的方法,并在Eclipse中查看。摘要内容大约为150字,提供了一定的参考价值。 ... [详细]
  • 本文讨论了在VMWARE5.1的虚拟服务器Windows Server 2008R2上安装oracle 10g客户端时出现的问题,并提供了解决方法。错误日志显示了异常访问违例,通过分析日志中的问题帧,找到了解决问题的线索。文章详细介绍了解决方法,帮助读者顺利安装oracle 10g客户端。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • JDK源码学习之HashTable(附带面试题)的学习笔记
    本文介绍了JDK源码学习之HashTable(附带面试题)的学习笔记,包括HashTable的定义、数据类型、与HashMap的关系和区别。文章提供了干货,并附带了其他相关主题的学习笔记。 ... [详细]
  • CEPH LIO iSCSI Gateway及其使用参考文档
    本文介绍了CEPH LIO iSCSI Gateway以及使用该网关的参考文档,包括Ceph Block Device、CEPH ISCSI GATEWAY、USING AN ISCSI GATEWAY等。同时提供了多个参考链接,详细介绍了CEPH LIO iSCSI Gateway的配置和使用方法。 ... [详细]
  • 模板引擎StringTemplate的使用方法和特点
    本文介绍了模板引擎StringTemplate的使用方法和特点,包括强制Model和View的分离、Lazy-Evaluation、Recursive enable等。同时,还介绍了StringTemplate语法中的属性和普通字符的使用方法,并提供了向模板填充属性的示例代码。 ... [详细]
  • 图像因存在错误而无法显示 ... [详细]
  • 如何在HTML中获取鼠标的当前位置
    本文介绍了在HTML中获取鼠标当前位置的三种方法,分别是相对于屏幕的位置、相对于窗口的位置以及考虑了页面滚动因素的位置。通过这些方法可以准确获取鼠标的坐标信息。 ... [详细]
  • 设计模式——模板方法模式的应用和优缺点
    本文介绍了设计模式中的模板方法模式,包括其定义、应用、优点、缺点和使用场景。模板方法模式是一种基于继承的代码复用技术,通过将复杂流程的实现步骤封装在基本方法中,并在抽象父类中定义模板方法的执行次序,子类可以覆盖某些步骤,实现相同的算法框架的不同功能。该模式在软件开发中具有广泛的应用价值。 ... [详细]
author-avatar
芬妮199025
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有