Elasticsearch分词器

news2024/12/27 13:19:37

前奏

es的chinese、english、standard等分词器对中文分词十分不友好,几乎都是逐字分词,对英文分词比较友好。

在kibana的dev tools中测试分词:

POST /_analyze 
{
  "analyzer": "standard",
  "text": "你太棒了golang"
}
  • POST:请求方式
  • /_analyze:请求路径,此处省略了http://127.0.0.1:9200,由kibana自行补全
  • 请求参数,json格式
    • analyzer:分词器类型,默认为standard分词器
    • text:将要分词的内容
{
  "tokens" : [
    {
      "token" : "你",
      "start_offset" : 0,
      "end_offset" : 1,
      "type" : "<IDEOGRAPHIC>",
      "position" : 0
    },
    {
      "token" : "太",
      "start_offset" : 1,
      "end_offset" : 2,
      "type" : "<IDEOGRAPHIC>",
      "position" : 1
    },
    {
      "token" : "棒",
      "start_offset" : 2,
      "end_offset" : 3,
      "type" : "<IDEOGRAPHIC>",
      "position" : 2
    },
    {
      "token" : "了",
      "start_offset" : 3,
      "end_offset" : 4,
      "type" : "<IDEOGRAPHIC>",
      "position" : 3
    },
    {
      "token" : "golang",
      "start_offset" : 4,
      "end_offset" : 10,
      "type" : "<ALPHANUM>",
      "position" : 4
    }
  ]
}

ik分词器

此处引入ik分词器,其下载地址为:https://github.com/medcl/elasticsearch-analysis-ik/releases/tag/v7.6.1

选择如下压缩包下载即可
在这里插入图片描述
将该压缩包解压到ES安装目录的plugins文件夹
在这里插入图片描述
重启ES后,在Kibana中指定分词策略
ik分词器有两种模式

  • ik_smart:最少切分,粒度始终,切分后占用内存少
  • ik_max_word:最细切分,精细化切分,占用内存多

二者在选取时需要关注分词场景及内存规划

ik_smart切分效果:

POST /_analyze
{
  "analyzer": "ik_smart",
  "text": "你太棒了golang"
}

{
  "tokens" : [
    {
      "token" : "你",
      "start_offset" : 0,
      "end_offset" : 1,
      "type" : "CN_CHAR",
      "position" : 0
    },
    {
      "token" : "太棒了",
      "start_offset" : 1,
      "end_offset" : 4,
      "type" : "CN_WORD",
      "position" : 1
    },
    {
      "token" : "golang",
      "start_offset" : 4,
      "end_offset" : 10,
      "type" : "ENGLISH",
      "position" : 2
    }
  ]
}

ik_max_word切分效果:

POST /_analyze
{
  "analyzer": "ik_max_word",
  "text": "你太棒了golang"
}

{
  "tokens" : [
    {
      "token" : "你",
      "start_offset" : 0,
      "end_offset" : 1,
      "type" : "CN_CHAR",
      "position" : 0
    },
    {
      "token" : "太棒了",
      "start_offset" : 1,
      "end_offset" : 4,
      "type" : "CN_WORD",
      "position" : 1
    },
    {
      "token" : "太棒",
      "start_offset" : 1,
      "end_offset" : 3,
      "type" : "CN_WORD",
      "position" : 2
    },
    {
      "token" : "了",
      "start_offset" : 3,
      "end_offset" : 4,
      "type" : "CN_CHAR",
      "position" : 3
    },
    {
      "token" : "golang",
      "start_offset" : 4,
      "end_offset" : 10,
      "type" : "ENGLISH",
      "position" : 4
    }
  ]
}

ik分词器,拓展词库,停用词库

要拓展ik分词器的词库,只需要修改一个ik分词器目录中的config目录中的IKAnalyzer.cfg.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
	<comment>IK Analyzer 扩展配置</comment>
	<!--用户可以在这里配置自己的扩展字典 -->
	<entry key="ext_dict"></entry>
	 <!--用户可以在这里配置自己的扩展停止词字典-->
	<entry key="ext_stopwords"></entry>
	<!--用户可以在这里配置远程扩展字典 -->
	<!-- <entry key="remote_ext_dict">words_location</entry> -->
	<!--用户可以在这里配置远程扩展停止词字典-->
	<!-- <entry key="remote_ext_stopwords">words_location</entry> -->
</properties>

在标签内加入文件路径

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
	<comment>IK Analyzer 扩展配置</comment>
	<!--用户可以在这里配置自己的扩展字典 -->
	<entry key="ext_dict">ext.dic</entry>
	 <!--用户可以在这里配置自己的扩展停止词字典-->
	<entry key="ext_stopwords">stopword.dic</entry>
	<!--用户可以在这里配置远程扩展字典 -->
	<!-- <entry key="remote_ext_dict">words_location</entry> -->
	<!--用户可以在这里配置远程扩展停止词字典-->
	<!-- <entry key="remote_ext_stopwords">words_location</entry> -->
</properties>

同时建立ext.dic文件及stopword.dic文件,将词汇按行写入文件中,重启es即可生效。

  • ext.dic是扩展词列表
  • stopword.dic是停用(禁用)词列表

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/672966.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vue源码分析

1、获取vue源码 项目地址&#xff1a;https://github.com/vuejs/vue 2、文件结构 源码目录 3、调试环境搭建 安装依赖&#xff1a; npm i 安装rollup&#xff1a;npm i -g rollup 修改dev脚本&#xff0c;添加sourcemap&#xff0c;package.json "dev": "ro…

C语言建立并查集

一.树的存储方式 在知道并查集之前&#xff0c;我们得知道树的三种存储方式&#xff1a; 1.双亲表示法 双亲表示法 &#xff1a;双亲表示法是最简单的一种存储方式&#xff0c;它使用一个大小为n的一维数组来表示树中的n个节点。在数组中&#xff0c;每个元素存储该节点的父…

Linux内核态内存泄露检测工具——Kmemleak

我的圈子&#xff1a; 高级工程师聚集地 我是董哥&#xff0c;高级嵌入式软件开发工程师&#xff0c;从事嵌入式Linux驱动开发和系统开发&#xff0c;曾就职于世界500强企业&#xff01; 创作理念&#xff1a;专注分享高质量嵌入式文章&#xff0c;让大家读有所得&#xff01; …

Windows开始菜单栏处无法直接搜索软件

文章目录 1. 打开cmd&#xff0c;输入start powershell打开PowerShell&#xff0c;然后在PowerShell中输入下面的命令&#xff0c;之后重启电脑2. 修改注册表3. 开启Windows Search服务4. 可能是搜索进程被禁用了5. 开启Cortana5.1. 打开gpedit.msc 6. 使用疑难解答6.1. 选择其…

chatgpt赋能python:Python如何查找特定名称文件

Python如何查找特定名称文件 在计算机文件管理和互联网网络应用程序中&#xff0c;查找特定文件往往是一项必要的任务。在使用Python编程时&#xff0c;我们可以使用Python内置的os模块来查找特定名称的文件。本文将介绍如何使用Python查找特定名称的文件&#xff0c;并提供实…

一个例子带你了解MapReduce

写在前面&#xff1a;博主是一只经过实战开发历练后投身培训事业的“小山猪”&#xff0c;昵称取自动画片《狮子王》中的“彭彭”&#xff0c;总是以乐观、积极的心态对待周边的事物。本人的技术路线从Java全栈工程师一路奔向大数据开发、数据挖掘领域&#xff0c;如今终有小成…

LTV-6314-ASEMI代理台湾光宝高速光耦LTV-6314

编辑&#xff1a;ll LTV-6314-ASEMI代理台湾光宝高速光耦LTV-6314 型号&#xff1a;LTV-6314 品牌&#xff1a;台湾光宝 封装&#xff1a;LSOP-6 引脚数量&#xff1a;6 类型&#xff1a;光耦 特性&#xff1a;台湾光宝、IGBT驱动器、储能专用光耦&#xff3c;高速光耦 …

如何看一块intel主板的配置的好坏

为什么写这篇文章 最近在挑13900k的主板&#xff0c;挑的眼花缭乱&#xff0c;发现主板市场不像CPU市场有那么清晰的产品线。 单拿微星一家的Z790来说&#xff0c;就包括但不限于以下型号 Z790 GAMINGZ790-PZ790-AZ790暗黑Z790刀锋 每一种的价格都不一样&#xff0c;更别弹还…

Golang每日一练(leetDay0104) 买卖股票最佳时机之含冷冻期、手续费

目录 309. 最佳买卖股票时机含冷冻期 Best-time-to-buy-and-sell-stock-with-cooldown &#x1f31f;&#x1f31f; 714. 买卖股票的最佳时机含手续费 Best-time-to-buy-and-sell-stock-with-transaction-fee &#x1f31f;&#x1f31f; &#x1f31f; 每日一练刷题专栏 …

读发布!设计与部署稳定的分布式系统(第2版)笔记08_自黑与放大

1. 自黑式攻击 1.1. 自黑只会偶尔成为人类的美德 1.2. 对系统来说&#xff0c;绝对不会推崇自黑 1.3. “自黑式攻击”是指系统或有人类参与的扩展系统联合外部对自身发起攻击 1.4. 好的营销可以随时杀死你 1.4.1. 并不是每个自黑的“伤口”&#xff0c;都可以归咎于营销部…

<C++> C++11新的类功能

C11新的类功能 1.默认成员函数 原来C类中&#xff0c;有6个默认成员函数&#xff1a; 构造函数析构函数拷贝构造函数拷贝赋值重载取地址重载const取地址重载 最后重要的是前4个&#xff0c;后两个用处不大。默认成员函数就是我们不写编译器会生成一个默认的。 C11 新增了两个…

Uniapp 开发 ①(快速上手)

作者 : SYFStrive 博客首页 : HomePage &#x1f4dc;&#xff1a; 微信小程序 &#x1f4cc;&#xff1a;个人社区&#xff08;欢迎大佬们加入&#xff09; &#x1f449;&#xff1a;社区链接&#x1f517; &#x1f4cc;&#xff1a;觉得文章不错可以点点关注 &#x1f4…

Vue3在工作中使用的一些经验总结

1、隐藏el-tab-pane 设置隐藏 2、Vue中ref的使用 3、Vue中的api 4、component: () &#xff1e; import(‘/views/order/orderDetail‘), 5、ids selections.map((i) > i.ruleId); 6、路由配置的三种方式 项目中使用到的 7、Vue3新特性 8、template在Vue中的作用 9、…

电脑装机后使用Administrator作为电脑账号

目录标题 1 搜索cmd使用管理员权限运行&#xff08;因为直接winr无法用权限打开&#xff09;2 输入net user administrator /active:yes&#xff0c;之后系统会提示命令完成&#xff0c;通过这个指令就是让系统默认账户administrator成为超级管理员&#xff0c;方便接下来的操作…

学习mysql

Mysql SQL语言的规则与规范SQL大小写规范注释数据导入指令 基本的SELECT语句SELECT.列的别名去掉重复行空值参与运算着重号(当有表名是关键字时)显示表结构where 运算符算术运算符 比较运算符号性运算符非符号形运算符空运算符非空运算符最小值运算符最大值运算符BETWEEN AND运…

python处理Excel Pandas xlwings numpy, jupyter,docx,jieba 词频统计 flash

# 批量创建Excel import xlwings # xw.App(visibleTrue,add_bookTrue) 会打开Excel&#xff0c;且不会自动关闭 # xw.App(visibleTrue,add_bookTrue) 会打开Excel&#xff0c;但一晃就自动关闭了 app xlwings.App(visibleTrue, add_bookFalse) for language in [Java, Pyt…

C++——set/multiset再理解

目录 1. 关联式容器 2. 键值对 3. 树形结构的关联式容器 4. set容器 4.1 set的介绍 4.2 set的使用 5. multiset 5.1 multiset的介绍 5.2 mutiset的使用 1. 关联式容器 先前我们已经接触过STL中的部分容器&#xff0c;比如&#xff1a;vector、list、deque、forward_…

边缘计算技术主要有哪几种?如何应用在实际场景中?

边缘计算是一种新的计算架构&#xff0c;它将计算资源移动到靠近终端用户的边缘设备中&#xff0c;以实现更快、更可靠、更安全的数据传输和处理。边缘AI智能则是指将人工智能算法和模型部署到边缘设备上&#xff0c;使其能够在设备本身上执行计算和决策&#xff0c;而不需要发…

【unity每日一记】资源和场景加载图文详解

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;uni…

Jmeter(一) - 从入门到精通 - 环境搭建(详解教程)

1.JMeter 介绍 Apache JMeter是100%纯JAVA桌面应用程序&#xff0c;被设计为用于测试客户端/服务端结构的软件(例如web应用程序)。它可以用来测试静态和动态资源的性能&#xff0c;例如&#xff1a;静态文件&#xff0c;Java Servlet,CGI Scripts,Java Object,数据库和FTP服务器…