Elasticsearch 分析器(内置分析器,自定义分析器,IK分析器)

Elasticsearch 分析器(内置分析器,自定义分析器,IK分析器)

  • 内置分析器
  • 使用分析器
  • 自定义分析器
  • 中文分析器(IK分析器)
    • 安装
    • 使用
      • 添加词典

内置分析器

官网:https://www.elastic.co/guide/en/elasticsearch/reference/7.10/analysis-analyzers.html

ES 内置了一些分析器。

在这里插入图片描述

默认情况下,一个索引的字段类型为text是,该字段在建立索引时和查询时的分析器时standard。

standard分析器由standard分词器,lowercase分词过滤器和stop分词过滤器(默认禁用)构成。

standard分析器对于中文只能按字拆分。

# 默认的标准分析器
POST _analyze
{
  "analyzer": "standard",
  "text": "<h>This is a word"
}

在这里插入图片描述

# 自己组合的分析器,
# 字符过滤器过滤 html标签
# 分词器,根据空白符进行分词
# 分词过滤器,字母小写 并 过滤掉停用词
POST _analyze
{
  "char_filter": ["html_strip"], 
  "tokenizer": "whitespace",
  "filter": ["lowercase","stop"], 
  "text": "<h>This is a word"
}

在这里插入图片描述
解释上述结果

原文: <h>This is a word
经过html字符过滤器 This is a word
经过空白符分词器 [This, is, a, word]
经过小写分词器 [this, is , a, word]
经过停用词分词器 [word]
所以最终结果 只有 word 一个单词

使用分析器

PUT /my-index-000001
{
  //指定默认分析器为whitespace
  "settings": {
    "analysis": {
      "analyzer": {
        "default":{
          "type":"whitespace"
        }
      }
    }
  },
  "mappings": {
    "properties": {
      // 没有指定分析器,搜索和索引都使用默认分析器whitespace
      "title1":{
        "type": "text"
      },
      // 仅指定索引分析器standard,搜索和索引都使用分析器standard
      "title2":{
        "type": "text",
        "analyzer": "standard"
      },
      // 分别指定索引分析器和搜索分析器,索引分析器为standard,搜索分析器为standard
      "title3":{
        "type": "text",
        "analyzer": "standard",
        "search_analyzer": "standard"
      }
    }
  }
}

注意: 上述 title3 指定的搜索分析器和索引时的分析器是一致的,但是在大多数情况下是没有必要指定的,因为在默认情况下二者就是一致的。

如果指定的搜索分析器和索引时的分析器不一致,则ES在搜索时可能出现有不符合预期的匹配情况,因此该设置在使用时需要慎重选择。

自定义分析器

ES 也支持用户自定义分析器

当自带的分析器不满足需求时,需要用户自己定义分析器

PUT my-index-000002
{
  "settings": {
    "analysis": {
      "analyzer": {
        "my_custom_analyzer": { 
          //指定 自定义类型分析器
          "type": "custom",
          //指定 自定义的字符过滤器
          "char_filter": [
            "my_filter"
          ],
          // 指定 自定义的分词器
          "tokenizer": "my_tokenizer",
          // 指定 自定义的 分词过滤器
          "filter": [
            "lowercase",
            "my_filter"
          ]
        }
      },
      //自定义的分词器
      "tokenizer": {
        // 分词器:按照正则进行切分词
        "my_tokenizer": { 
          "type": "pattern",
          "pattern": "[ .,!?]"
        }
      },
      // 自定义的 字符过滤器
      "char_filter": {
        // 字符过滤器:将:) 转化为 _happy_,将:( 转化为 _sad_
        "my_filter": { 
          "type": "mapping",
          "mappings": [
            ":) => _happy_",
            ":( => _sad_"
          ]
        }
      },
      // 自定义的 分词过滤器
      "filter": {
        // 分词过滤器,过滤英文的停用词
        "my_filter": { 
          "type": "stop",
          "stopwords": "_english_"
        }
      }
    }
  }
}

POST my-index-000002/_analyze
{
  "analyzer": "my_custom_analyzer",
  "text": "I'm a :) person, and you?"
}

在这里插入图片描述
解释上述结果:

原文: I’m a : ) person, and you?
经过my_filter字符过滤器 I’m a happy person, and you?
经过my_tokenizer分词器 [I’m, a, happy, person, and, you]
经过小写分词器 [i’m, a, happy, person, and, you]
经过停用词分词器 删除 停用词(a, and) [i’m, happy, person, you]
所以最终结果 [i’m, happy, person, you]

中文分析器(IK分析器)

前面提到过,ES内置的分词器都不支持中文的分词。所以我们需要自己安装中文分析器插件。
IK分析器时比较常用的中文分析器。其原理是基于词典的分词算法。

安装

下载地址: https://github.com/medcl/elasticsearch-analysis-ik/releases

下载与ES版本一致的IK插件包,这里以7.10.2 为例

# 进入es的插件目录
cd es/plugins
# 创建ik目录
mkdir ik
# 在ik 目录下解压 ik分析器
unzip elasticsearch-analysis-ik-7.10.2.zip
# 进入es/bin目录,重启es
./elasticsearch -d

使用

IK分词器内置了两个子分析器,即ik_smart 和 ik_max_word (分词器与其同名)

ik_smart:切分粒度比较粗
例如: “假日酒店”=> “假日酒店”

POST _analyze
{
  "analyzer": "ik_smart",
  "text": "假日酒店"
}

在这里插入图片描述

ik_max_word: 切分粒度比较细,穷举了所有可能的组合
例如: “假日酒店”=> “假日酒店”,“假日”,“酒店”

POST _analyze
{
  "analyzer": "ik_max_word",
  "text": "假日酒店"
}

在这里插入图片描述

添加词典

对于IK分词器不认识的词,其不能合理切分,所以有时需要我们手动添加一些词典。
例如:一些网络热词,ik分词器并不能很好的切分

POST _analyze
{
  "analyzer": "ik_smart",
  "text": "及你太美"
}

在这里插入图片描述
上面的分词结果,显然不是我想要的。为了得到正确的分词结果。需要添加自定义词典

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">custom-dict.dic</entry>
         <!--用户可以在这里配置自己的扩展停止词字典-->
        <entry key="ext_stopwords">custom-stop.dic</entry>
        <!--用户可以在这里配置远程扩展字典 -->
        <!-- <entry key="remote_ext_dict">words_location</entry> -->
        <!--用户可以在这里配置远程扩展停止词字典-->
        <!-- <entry key="remote_ext_stopwords">words_location</entry> -->
</properties>

在 custom-dict.dic 文件中 写入 所需的热词,

在这里插入图片描述

重启ES,重新分析,可以看到热词按照自定义设置进行切分了

POST _analyze
{
  "analyzer": "ik_smart",
  "text": "及你太美"
}

在这里插入图片描述
如果还需要其他的热词更新方式,如Mysql,Redis 等,可以下载Ik分析器的源码自行开发

注意: 默认情况下,IK分词器不会热更新词库,也就是说,每次更新自定义词库,都需要重启ES。同样的,想要热更新,可以下载源码自行开发。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何确保大模型 RAG 生成的信息是基于可靠的数据源?

在不断发展的人工智能 (AI) 领域中&#xff0c;检索增强生成 (RAG) 已成为一种强大的技术。 RAG 弥合了大型语言模型 (LLM) 与外部知识源之间的差距&#xff0c;使 AI 系统能够提供更全面和信息丰富的响应。然而&#xff0c;一个关键因素有时会缺失——透明性。 我们如何能够…

翻译《The Old New Thing》- What‘s the deal with the EM_SETHILITE message?

Whats the deal with the EM_SETHILITE message? - The Old New Thing (microsoft.com)https://devblogs.microsoft.com/oldnewthing/20071025-00/?p24693 Raymond Chen 2007年10月25日 简要 文章讨论了EM_SETHILITE和EM_GETHILITE消息在文档中显示为“未实现”的原因。这些…

Redis开发实战

单机部署安装 服务端下载&#xff0c;安装&#xff0c;启动去官网下载最新的版本&#xff1a;http://redis.io/download &#xff0c;这里用的是3.0.2解压后&#xff0c;进入解压好的文件夹redis的安装非常简单&#xff0c;因为已经有现成的Makefile文件&#xff0c;所以直接先…

NASA数据集——阿尔法喷气式大气实验甲醛(HCHO)数据

Alpha Jet Atmospheric eXperiment Formaldehyde Data 简介 阿尔法喷气式大气实验甲醛数据 阿尔法喷气式大气实验&#xff08;AJAX&#xff09;是美国国家航空航天局艾姆斯研究中心与 H211, L.L.C. 公司的合作项目&#xff0c;旨在促进对加利福尼亚、内华达和太平洋沿岸地区的…

从0开始带你成为Kafka消息中间件高手---第一讲

从0开始带你成为Kafka消息中间件高手—第一讲 网站的用户行为日志&#xff0c;假设电商网站&#xff0c;我现在需要买一个阅读架&#xff0c;看书的架子 京东&#xff0c;我平时比较喜欢用的是京东&#xff0c;送货很快&#xff0c;自营商品&#xff0c;都是放在自己的仓库里…

【字典树(前缀树) 异或 离线查询】1707. 与数组中元素的最大异或值

本文涉及知识点 字典树&#xff08;前缀树&#xff09; 位运算 异或 离线查询 LeetCode1707. 与数组中元素的最大异或值 给你一个由非负整数组成的数组 nums 。另有一个查询数组 queries &#xff0c;其中 queries[i] [xi, mi] 。 第 i 个查询的答案是 xi 和任何 nums 数组…

阿里巴巴最新研究突破:自我演化大模型,打破性能天花板

获取本文论文原文PDF&#xff0c;请在公众号【AI论文解读】留言&#xff1a;论文解读AI论文解读 原创作者 | 柏企 引言&#xff1a;自我进化的新篇章 在人工智能领域&#xff0c;大型语言模型&#xff08;LLMs&#xff09;的发展正迎来一场革命性的变革。传统的训练模式依赖…

从0开始学统计-方差分析

1.什么是方差分析&#xff1f; 方差分析&#xff08;ANOVA&#xff0c;Analysis of Variance&#xff09;是一种统计方法&#xff0c;用于比较三个或三个以上组之间的平均值是否存在显著差异。它适用于以下情况&#xff1a; &#xff08;1&#xff09; 当我们有三个或三个以上…

LLMs之PEFT之Llama-2:《LoRA Learns Less and Forgets LessLoRA学得更少但遗忘得也更少》翻译与解读

LLMs之PEFT之Llama-2&#xff1a;《LoRA Learns Less and Forgets LessLoRA学得更少但遗忘得也更少》翻译与解读 导读&#xff1a;该论文比较了LoRA与完全微调在代码与数学两个领域的表现。 背景问题&#xff1a;微调大规模语言模型需要非常大的GPU内存。LoRA这一参数高效微调方…

.NET 一款内部最新的免杀WebShell

01阅读须知 此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等&#xff08;包括但不限于&#xff09;进行检测或维护参考&#xff0c;未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失&#xf…

【Linux】Linux的基本指令_1

文章目录 二、基本指令1. whoami 和 who2. pwd3. ls4. clear5. mkdir 和 cd6. touch7. rmdir 和 rm 未完待续 二、基本指令 直接在命令行的末尾&#xff08;# 后面&#xff09;输入指令即可。在学习Linux指令的过程中&#xff0c;还会穿插一些关于Linux的知识点。 1. whoami …

ftp是什么,ftp能做什么,ftp有什么用 -----ftp介绍

大家好&#xff0c;我是风屿&#xff0c;今天开始我会给大家介绍一些关于网络方面的配置以及介绍等等&#xff0c;今天是ftp FTP中文名字叫做文件传输协议&#xff0c;英文名字叫做File Transfer Protocol&#xff08;简称为ftp&#xff09; FTP 是因特网网络上历史最悠久的网…

哔哩哔哩抢红包项目,b站抢红包脚本,号称单机单号一天5-50+(教程+软件)

一、哔哩哔哩抢红包项目介绍&#xff1a; 1. 玩法规则方面&#xff1a; 参与直播间抢红包活动&#xff0c;赢取礼物。每日领取礼物上限为20-30个&#xff0c;达到上限后&#xff0c;系统将自动跳转至养号哗哩礼物价值。目前电池兑换比例&#xff1a;10电池1元。 2. 礼物变现方…

2024年春招高薪职业报告:大模型算法研究员领跑

近日&#xff0c;脉脉高聘发布的研究报告《2024春招高薪职业和人才洞察》&#xff08;以下简称《洞察》&#xff09;显示&#xff0c;2024年一季度&#xff0c;大模型算法研究员新发岗位以平均月薪6.4万元领跑高薪岗位榜。受人才培养周期和技术门槛影响&#xff0c;人工智能行业…

飞机大战游戏实现揭秘

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、游戏概览与核心玩法 二、游戏模块详解 1. 游戏主循环模块 2. 创建初始化模块 三、关…

云端智享——记移动云手写docker-demo

目录 前言什么是移动云&#xff1f;为何我会使用移动云&#xff1f;移动云“好”在哪里&#xff1f;资源大屏显示继续项目部署其他细节 移动云产品的评价未来展望 前言 在如今这个万物都上云的时代&#xff0c;我们需要选择合适的云产品&#xff0c;而移动云有着独特的优势和广…

SpringBoot使用rsa-encrypt-body-spring-boot实现接口加解密

废话不多说&#xff0c;直接上代码 引入依赖 <dependency><groupId>cn.shuibo</groupId><artifactId>rsa-encrypt-body-spring-boot</artifactId><version>1.0.1.RELEASE</version> </dependency>配置文件 rsa:encrypt:# 是…

python机器学习及深度学习在空间模拟与时间预测

原文链接https://mp.weixin.qq.com/s?__bizMzUyNzczMTI4Mg&mid2247628504&idx2&sn6fe3aeb9f63203cfe941a6bb63b49b85&chksmfa77a9e5cd0020f3aa4f01887e75b15096a182c2b5b42c1044787aa285c650f1469a0ef28aec&token2124656491&langzh_CN&scene21#we…

【面试干货】完全平方数

【面试干货】完全平方数 1、实现思想2、代码实现 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 一个整数&#xff0c;它加上 100 后是一个完全平方数&#xff0c;再加上 168 又是一个完全平方数&#xff0c;请问该数是多少&#xff1f; 1、…

MyBatis复习笔记

3.Mybatis复习 3.1 xml配置 properties&#xff1a;加载配置文件 settings&#xff1a;设置驼峰映射 <settings><setting name"mapUnderscoreToCamelCase" value"true"/> </settings>typeAliases&#xff1a;类型别名设置 #这样在映射…