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

ElasticSearchAnalyzer默认分词器、ik分词器、远程词典、停用词(五)

一、名词解释Analysis:文本分析是把全文本转换一系列单词(tremtoken)的过程,也叫分词Analysis是通过Analyzer来实现的可以使用es内置分析器,或按需定制

一、名词解释

  • Analysis:文本分析是把全文本转换一系列单词(trem/token)的过程,也叫分词

  • Analysis是通过Analyzer来实现的

    • 可以使用es内置分析器,或按需定制化分析器
      除了在数据写入时转换词条,匹配query语句时也需要用相同的分析器对查询语句进行分析
  • 分词器时专门处理分词的组件,Analyzer又三部分组成

    • Character Filters(针对原始文本处理,例如去除HTML)
    • Tokenizer:按照规则切分单词
    • Token Filter:将切分的单词进行加工,小写,删除stopwords,增加同义词

二、默认分词器

1、_analyzer API的使用

直接指定Analyzer进行测试

GET _analyze
{
"analyzer": "standard",
"text": "demo analyzer"
}

指定索引的字段进行测试

POST index_demo/_analyze
{
"field": "title",
"text": "demo analyzer"
}

自定义分词器进行测试

POST _analyze
{
"tokenizer": "standard",
"filter": ["lowercase"],
"text": "demo analyzer"
}

2、Standard Analyzer – 默认分词器,按词切分,小写处理

Tokenizer:Standard
Token Filters:Standard、Lower Case、Stop(默认关闭)

GET _analyze
{
"analyzer": "standard",
"text": "Learning a new course vue_4"
}

按照空格的方式拆分,转小写,忽略停用词

3、Simple Analyzer – 按照非字母切分(符号被过滤),小写处理

Token Filters:Lower Case

GET _analyze
{
"analyzer": "simple",
"text": "Learning a new course vue_4."
}

非字母的方式切分,删除非字母,转小写

4、Stop Analyzer – 小写处理,停用词过滤(the,a,is)

Tokenizer:Lower Case
Token Filters:Stop

{
"analyzer": "stop",
"text": "Learning a new course vue_4."
}

相比Simple Analyzer多了stop filter,会把the、a、is等修饰语 和标点符号数字去掉
分词小写处理,自动删除停用词,如果符号隔离的2个单词会分成2个单词

5、Whitespace Analyzer – 按照空格切分,不转小写

Tokenizer:Whitespace

GET _analyze
{
"analyzer": "whitespace",
"text": "Learning a new course vue_4."
}

按空格的方式切分

6、Keyword Analyzer – 不分词,直接将输入当作输出

Tokenizer:Keyword

GET _analyze
{
"analyzer": "keyword",
"text": "Learning a new course vue_4."
}

不分词,直接将输入当作输出

7、Patter Analyzer – 正则表达式,默认 \W+ (非字符分隔)

Tokenizer:Patter
Token Filters:Lower Case、Stop

GET _analyze
{
"analyzer": "pattern",
"text": "Learning a new course vue_4."
}

通过正则表达式的方式分词,默认按照非字母的符号拆分(不拆分"_"),去除标点符号,转小写

8、Language – 提供了30多种常见语言的分词器

支持不同国家的语言分词

arabic, armenian, basque, bengali, brazilian, bulgarian, catalan, cjk, czech, danish, dutch, english, estonian, finnish, french, galician, german, greek, hindi, hungarian, indonesian, irish, italian, latvian, lithuanian, norwegian, persian, portuguese, romanian, russian, sorani, spanish, swedish, turkish, thai.

english分词举例

GET _analyze
{
"analyzer": "english",
"text": "Learning a new course vue_4."
}

词转换,stop停用词

三、中文分词ik分词器

中文分词相对较难,因为需要根据不同的词意分词,不能按照一个字分词和一个词分词,不同的上下文中有不同的表述

ik分词优点:

  • 支持自定义词库
  • 支持热更新
  • 支持停用词

github中ik分词下载地址

1.进入官网下载地址
《ElasticSearch Analyzer默认分词器、ik分词器、远程词典、停用词(五)》
2.找到对应版本的插件,下载.zip文件
《ElasticSearch Analyzer默认分词器、ik分词器、远程词典、停用词(五)》
3.在es的plugins下创建一个目录例如“ik”,必须创建否则报错,如下
《ElasticSearch Analyzer默认分词器、ik分词器、远程词典、停用词(五)》
如果是docker启动挂载,则在挂载目录创建即可
4.将下载好ik zip文件移动到ik目录下并解压例如linux:unzip elasticsearch-analysis-ik-7.8.0.zip
5.重启es
《ElasticSearch Analyzer默认分词器、ik分词器、远程词典、停用词(五)》
6.plugins/ik/config/IKAnalyzer.cfg.xml:ik分词的配置文件,可以配置停用词,自定义扩展词,远程扩展词等
注意:远程词典域名访问可能会访问无法拉取词典,也可能是版本问题,ip方式访问没问题



<properties>
<comment>IK Analyzer 扩展配置comment>

<entry key="ext_dict">entry>

<entry key="ext_stopwords">entry>




properties>

远程扩展词java代码仅供参考

@RequestMapping("/ikDic")
public String ikDic (HttpServletRequest request, HttpServletResponse response) {
log.info("keyword/ikDic start");
String result = "";
String eTag = request.getHeader("If-None-Match");
String modified = request.getHeader("If-Modified-Since");
String currentDate = DateUtil.formateDate(new Date(), "yyyyMMdd");
// 发生改变更新 ik字典
boolean redisKey= false;
try {
String keyword_ikDic_key = redisUtil.get("keyword_ikDic_key");
if(StringUtils.isBlank(keyword_ikDic_key)){
redisKey = true;
}
}catch (Exception e){
log.info("keyword/ikDic 无此key keyword_ikDic_key");
}
log.info("加载ik分词,上次分词数:{},上次修改时间:{},当前日期:{},redisKey_ikDic={}",eTag,modified,currentDate,redisKey);
//设置头
if(!currentDate.equals(modified) || redisKey) {
Integer oldTag = ikService.getKeywordsByCreateTimeCount();
log.info("keyword/ikDic oldTag 加载ik分词,当前分词数:{},上次分词数={}",oldTag,eTag);
if(!oldTag.equals(eTag) || redisKey) {
redisUtil.set("keyword_ikDic_key", oldTag);
result = ikService.ikDic();
log.info("keyword/ikDic success 加载ik分词");
eTag = oldTag;
modified = currentDate;
}
}
//更新时间
response.setHeader("Last-Modified", modified);
response.setHeader("ETag", eTag);
log.info("keyword/ikDic end");
return result;
}

推荐阅读
  • 本文探讨了互联网服务提供商(ISP)如何可能篡改或插入用户请求的数据流,并提供了有效的技术手段来防止此类劫持行为,确保网络环境的安全与纯净。 ... [详细]
  • 本文将作为我硕士论文的一部分,但鉴于其内容的独特性和趣味性,决定单独发布。文中将定义一些皮亚诺公理,并介绍如何使用这些公理进行等式替换,以证明定理。 ... [详细]
  • 前端技术分享——利用Canvas绘制鼠标轨迹
    作为一名前端开发者,我已经积累了Vue、React、正则表达式、算法以及小程序等方面的技能,但Canvas一直是我的盲区。因此,我在2018年为自己设定了一个新的学习目标:掌握Canvas,特别是如何使用它来创建CSS3难以实现的动态效果。 ... [详细]
  • 本文详细介绍了在PHP中如何获取和处理HTTP头部信息,包括通过cURL获取请求头信息、使用header函数发送响应头以及获取客户端HTTP头部的方法。同时,还探讨了PHP中$_SERVER变量的使用,以获取客户端和服务器的相关信息。 ... [详细]
  • HDU 2537 键盘输入处理
    题目描述了一个名叫Pirates的男孩想要开发一款键盘输入软件,遇到了大小写字母判断的问题。本文提供了该问题的解决方案及实现方法。 ... [详细]
  • 基于51单片机的多项目设计实现与优化
    本文探讨了基于51单片机的多个项目的设计与实现,包括PID控制算法的开关电源设计、八音电子琴仿真设计、智能抽奖系统控制设计及停车场车位管理系统设计。每个项目均采用先进的控制技术和算法,旨在提升系统的效率、稳定性和用户体验。 ... [详细]
  • 本文探讨了在 PHP 的 Zend 框架下,使用 PHPUnit 进行单元测试时遇到的 Zend_Controller_Response_Exception 错误,并提供了解决方案。 ... [详细]
  • Kubernetes Services详解
    本文深入探讨了Kubernetes中的服务(Services)概念,解释了如何通过Services实现Pods之间的稳定通信,以及如何管理没有选择器的服务。 ... [详细]
  • 本文详细介绍了PHP中的几种超全局变量,包括$GLOBAL、$_SERVER、$_POST、$_GET等,并探讨了AJAX的工作原理及其优缺点。通过具体示例,帮助读者更好地理解和应用这些技术。 ... [详细]
  • 在AngularJS中,有时需要在表单内包含某些控件,但又不希望这些控件导致表单变为脏状态。例如,当用户对表单进行修改后,表单的$dirty属性将变为true,触发保存对话框。然而,对于一些导航或辅助功能控件,我们可能并不希望它们触发这种行为。 ... [详细]
  • 使用REM和媒体查询实现响应式布局
    本文介绍如何利用REM单位和媒体查询(Media Queries)来创建适应不同屏幕尺寸的网页布局。通过具体示例,展示在不同屏幕宽度下如何调整页面元素的样式。 ... [详细]
  • 本文详细介绍了Socket在Linux内核中的实现机制,包括基本的Socket结构、协议操作集以及不同协议下的具体实现。通过这些内容,读者可以更好地理解Socket的工作原理。 ... [详细]
  • 本文详细介绍了如何使用Linux下的mysqlshow命令来查询MySQL数据库的相关信息,包括数据库、表以及字段的详情。通过本文的学习,读者可以掌握mysqlshow命令的基本语法及其常用选项。 ... [详细]
  • 本文由公众号【数智物语】(ID: decision_engine)发布,关注获取更多干货。文章探讨了从数据收集到清洗、建模及可视化的全过程,介绍了41款实用工具,旨在帮助数据科学家和分析师提升工作效率。 ... [详细]
  • C/C++ 应用程序的安装与卸载解决方案
    本文介绍了如何使用Inno Setup来创建C/C++应用程序的安装程序,包括自动检测并安装所需的运行库,确保应用能够顺利安装和卸载。 ... [详细]
author-avatar
lookadgo_544
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有