Elasticsearch之文本分析

news2024/9/22 15:46:43

文本分析基本概念

官网:Text analysis | Elasticsearch Guide [7.17] | Elastic

        官网称为文本分析,这是对文本进行一直分析处理的方式,基本处理逻辑是为按照预先制定的分词规则,把原本的文档进行分割成多个小颗粒度的词项,颗粒度的大小取决于分词器的配置规则。

不同文本分析结果如下:

POST _analyze
{
    "analyzer":"standard",
    "text":"中华人民共和国"
}

#ik_smart:会做最粗粒度的拆
POST _analyze
{
    "analyzer": "ik_smart",
    "text": "中华人民共和国"
 }

#ik_max_word:会将文本做最细粒度的拆分
POST _analyze
{
    "analyzer":"ik_max_word",
    "text":"中华人民共和国"
}

文本分析发生时间

Index and search analysis | Elasticsearch Guide [7.17] | Elastic

文本分析处理发生在 Index Time 和 Search Time 两个时间。

  1. Index Time:文本写入并创建倒排索引时期,其分词逻辑取决于映射参数analyzer。
  2. Search Time:搜索执行时期,其分词仅对搜索词产生作用。

文本分析构成

Anatomy of an analyzer | Elasticsearch Guide [7.17] | Elastic

  • 切词器(Tokenizer):定义切词(分词)逻辑
  • 词项过滤器(Token Filter):分词之后的单个词项的处理逻辑
  • 字符过滤器(Character Filter):处理单个字符

分词器:Tokenizer

        tokenizer 是文本分析的核心组成部分之一,其主要作用是分词,或称之为切词。主要用来对原始文本进行细粒度拆分。拆分之后的每一个部分称之为一个 Term,或称之为一个词项。可以把切词器理解为预定义的切词规则。官方内置了很多种切词器,默认标准切词器standard。

词项过滤器:Token Filter

        词项过滤器用来处理切词完成之后的词项,例如把大小写转换,删除停用词或同义词处理等。官方同样预置了很多词项过滤器,基本可以满足日常开发的需要。当然也是支持第三方也自行开发的。

停用词

在切词完成之后,会被干掉词项,即停用词。停用词可以自定义
英文停用词(english):a, an, and, are, as, at, be, but, by, for, if, in, into, is, it, no, not, of, on,
or, such, that, the, their, then, there, these, they, this, to, was, will, with。
中日韩停用词(cjk):a, and, are, as, at, be, but, by, for, if, in, into, is, it, no, not, of, on, or, s,
such, t, that, the, their, then, there, these, they, this, to, was, will, with, www。

GET _analyze
{
"tokenizer": "standard",
"filter": ["stop"],
"text": ["how are you"]
}

自定义过滤器


# 自定义 filter
DELETE test_token_filter_stop
PUT test_token_filter_stop
{
  "settings": {
    "analysis": {
      "filter": {
        "my_filter": {
          "type": "stop",
          "stopwords": [
            "you"
          ],
          "ignore_case": true
        }
      }
    }
  }
}
GET test_token_filter_stop/_analyze
{
  "tokenizer": "standard", 
  "filter": ["my_filter"], 
  "text": ["how are you"]
}

同义词

同义词定义规则:

  • a, b, c => d:这种方式,a、b、c 会被 d 代替。
  • a, b, c, d:这种方式下,a、b、c、d 是等价的。
PUT test_token_filter_synonym
{
  "settings": {
    "analysis": {
      "filter": {
        "my_synonym": {
          "type": "synonym",
          "synonyms": [ "good, nice => excellent" ] //good, nice, excellent
        }
      }
    }
  }
}
GET test_token_filter_synonym/_analyze
{
  "tokenizer": "standard", 
  "filter": ["my_synonym"], 
  "text": ["good"]
}

字符过滤器:Character Filter

分词之前的预处理,过滤无用字符。

PUT <index_name>
{
  "settings": {
    "analysis": {
      "char_filter": {
        "my_char_filter": {
          "type": "<char_filter_type>"
        }
      }
    }
  }
}

type:使用的字符过滤器类型名称,可配置以下值:

  • html_strip
  • mapping
  • pattern_replace

HTML 标签过滤器:HTML Strip Character Filter

字符过滤器会去除 HTML 标签和转义 HTML 元素,如 、&

PUT test_html_strip_filter
{
  "settings": {
    "analysis": {
      "char_filter": {
        "my_char_filter": {
          "type": "html_strip",  // html_strip 代表使用 HTML 标签过滤器
          "escaped_tags": [     // 当前仅保留 a 标签        
            "a"
          ]
        }
      }
    }
  }
}
GET test_html_strip_filter/_analyze
{
  "tokenizer": "standard", 
  "char_filter": ["my_char_filter"],
  "text": ["<p>I&apos;m so <a>happy</a>!</p>"]
}

参数:escaped_tags:需要保留的 html 标签

字符映射过滤器:Mapping Character Filter

通过定义映替换为规则,把特定字符替换为指定字符

PUT test_html_strip_filter
{
  "settings": {
    "analysis": {
      "char_filter": {
        "my_char_filter": {
          "type": "mapping",    // mapping 代表使用字符映射过滤器
          "mappings": [                // 数组中规定的字符会被等价替换为 => 指定的字符
            "滚 => *",
            "垃 => *",
            "圾 => *"
          ]
        }
      }
    }
  }
}
GET test_html_strip_filter/_analyze
{
  //"tokenizer": "standard", 
  "char_filter": ["my_char_filter"],
  "text": "你个垃圾废物!滚"
}

正则替换过滤器:Pattern Replace Character Filter

PUT text_pattern_replace_filter
{
  "settings": {
    "analysis": {
      "char_filter": {
        "my_char_filter": {
          "type": "pattern_replace",    // pattern_replace 代表使用正则替换过滤器            
          "pattern": """(\d{3})\d{4}(\d{4})""",    // 正则表达式
          "replacement": "$1****$2"
        }
      }
    }
  }
}
GET text_pattern_replace_filter/_analyze
{
  "char_filter": ["my_char_filter"],
  "text": "手机号是18868686688"
}

倒排索引的数据结构

        当数据写入 ES 时,数据将会通过 分词 被切分为不同的 term,ES 将 term 与其对应的文档列表建立一种映射关系,这种结构就是 倒排索引。

        为了进一步提升索引的效率,ES 在 term 的基础上利用 term 的前缀或者后缀构建了 term index, 用于对 term 本身进行索引,ES 实际的索引结构如下图所示:

        这样当我们去搜索某个关键词时,ES 首先根据它的前缀或者后缀迅速缩小关键词的在 term dictionary 中的范围,大大减少了磁盘IO的次数。

  • 单词词典(Term Dictionary) :记录所有文档的单词,记录单词到倒排列表的关联关系
    • 常用字典数据结构:
    • 数据结构优缺点
      排序列表Array/List使用二分法查找,不平衡
      HashMap/TreeMap性能高,内存消耗大,几乎是原始数据的三倍
      Skip List跳跃表,可快速查找词语,在lucene、redis、Hbase等均有实现。相对于TreeMap等结构,特别适合高并发
      Trie适合英文词典,如果系统中存在大量字符串且这些字符串基本没有公共前缀,则相应的trie树将非常消耗内存
      Double Array Trie适合做中文词典,内存占用小,很多分词工具均采用此种算法
      Ternary Search Tree三叉树,每一个node有3个节点,兼具省空间和查询快的优点
      Finite State Transducers (FST)一种有限状态转移机,Lucene 4有开源实现,并大量使用
  • 倒排列表(Posting List)-记录了单词对应的文档结合,由倒排索引项组成
  • 倒排索引项(Posting):
    • 文档ID
    • 词频TF–该单词在文档中出现的次数,用于相关性评分
    • 位置(Position)-单词在文档中分词的位置。用于短语搜索(match phrase query)
    • 偏移(Offset)-记录单词的开始结束位置,实现高亮显示

Elasticsearch 的JSON文档中的每个字段,都有自己的倒排索引。

可以指定对某些字段不做索引:

  • 优点︰节省存储空间
  • 缺点: 字段无法被搜索

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

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

相关文章

800HZ电源-高频电源行业的明星

一、800Hz电源的简介&#xff1a; 800Hz电源&#xff0c;顾名思义&#xff0c;是一种专为满足通信系统中特定频率要求而设计的电源。通常&#xff0c;800Hz电源具有极高的稳定性和精确度&#xff0c;能提供稳定的电压输出&#xff0c;确保通信设备如交换机、基站、无线路由器等…

动手学操作系统(一、搭建实验环境)

动手学操作系统&#xff08;一、搭建实验环境&#xff09; 文章目录 动手学操作系统&#xff08;一、搭建实验环境&#xff09;1. 在VMware虚拟机中安装ubuntu20.042. 安装Bochs3. 启动计算机Reference &#x1f680; 环境配置 &#x1f680; 笔者的环境使用的是 ubuntu 20.04…

计算机图形学入门Games101笔记01:Overview of Computer Graphics

第一章讲述了计算机图形学是什么和GAMES101会讲什么 1.What is Computer Graphics? The use of computers to synthesize and manipulate visual information. 图形学是合成和操纵视觉信息的计算机应用。 百度百科&#xff1a;计算机图形学(Computer Graphics&#xff0c;简…

从零开始:如何集成美颜SDK和优化美颜接口

今天&#xff0c;小编将从零开始&#xff0c;详细讲解如何集成SDK并优化美颜接口。 一、选择合适的美颜SDK 评估SDK的功能 在评估过程中&#xff0c;可以通过阅读官方文档、查看示例代码以及实际测试来确定SDK是否符合需求。 兼容性和性能 确保其支持你开发的应用平台&…

开发多个工具包的黑产团伙GXC正在积极拥抱AI技术

研究人员发现一个名为 GXC Team 的犯罪团伙&#xff0c;该团伙专门开发用于网上银行盗窃、电子商务欺诈与互联网诈骗的工具。2023 年 11 月 11 日&#xff0c;该组织以别名 googleXcoder 在暗网上发布多项公告。开始售卖新开发的结合人工智能的工具&#xff0c;用于创建用于电汇…

【必备工具】gitee上传-保姆级教程

目录 1.gitee是什么 2.gitee怎么注册 ​编辑 3.gitee怎么提交代码 4.gitee的三板斧 Clone仓库 Q&A 1. Gitee 只有三板斧吗&#xff1f; 2. Git 教了&#xff0c;Gitee 上没有绿点怎么办&#xff1f; 3. 用户名和密码输入错误怎么办&#xff1f; 4. 操作时不小心…

0成本的副业兼职,咸鱼监督打卡,新手小白也能一天100+

这两天在咸鱼上闲逛&#xff0c;看到有个项目很有意思&#xff0c;监督别人打卡赚服务费&#xff0c;每天轻松收入100。 周周近财&#xff1a;让网络小白少花冤枉钱&#xff0c;赚取第一桶金 这种监督打卡服务并非新颖的商业模式&#xff0c;实际上在很久以前&#xff0c;许多…

美业SaaS收银系统源码-已过期卡项需要延期怎么操作?美业系统实操

美业SaaS系统 连锁多门店美业收银系统源码 多门店管理 / 会员管理 / 预约管理 / 排班管理 / 商品管理 / 促销活动 PC管理后台、手机APP、iPad APP、微信小程序 1.询问会员手机号和需要延期的卡项 2.PC运营后端-数据导入-修改已售卡项&#xff0c;搜索手机号 3.把需要卡项选…

Oracle 序列-SEQUENCE

文章目录 序列-SEQUENCE创建序列访问序列序列的修改和删除查询序列信息 序列-SEQUENCE 创建序列 访问序列 序列的修改和删除 DROP SEQUENCE SEQ_EKPO;查询序列信息 可以通过视图 dba/all/user_sequences 查询序列的相关信息 SELECT SEQUENCE_NAME FROM DBA_SEQUENCES WHERE …

穿越时空的工厂之旅:探索可视化三维场景的奥秘

在科技日新月异的今天&#xff0c;我们似乎总是在不断追求着更加高效、智能的生产方式。 传统的工厂管理方式往往依赖于平面图纸、纸质文档和现场巡查&#xff0c;这不仅效率低下&#xff0c;而且容易出错。而三维可视化技术通过3D建模和虚拟现实技术&#xff0c;将工厂内部的各…

[企业级高效系统工具]短视频矩阵系统 ,一站式管理新媒体账号,短视频精准获客,一键管理上千个短视频账。

一、做项目为什么要搭建一款属于自己的系统&#xff1f; 在讲这个短视频矩阵系统前&#xff0c;我们聊聊做项目的时候为什么要搭建一款属于自己的系统。 1.拥有自己的系统&#xff0c;就意味着你可以随时随地进行源码部署和更新。你的项目就能紧跟时代潮流&#xff0c;始终保持…

嵌入式进阶——RTC时钟

&#x1f3ac; 秋野酱&#xff1a;《个人主页》 &#x1f525; 个人专栏:《Java专栏》《Python专栏》 ⛺️心若有所向往,何惧道阻且长 文章目录 RTC时钟原理图PCF8563寄存器控制与状态寄存器 设备地址I2C环境初始化RTC寄存器数据读取RTC寄存器数据写入RTC闹钟设置RTC定时器设置…

Linux 使用 yum安装 ELK服务,yum 安装elasticsearch和Kibana(未写完)

文章目录 环境准备ELK组件介绍安装Elasticsearch安装Kibana 丢弃下载ELK 服务安装包Elasticsearch安装 Tips:关闭elasticsearch https 环境准备 ELK组件介绍 ElasticSearch &#xff1a; 是一个近实时&#xff08;NRT&#xff09;的分布式搜索和分析引擎&#xff0c;它可以用…

学术图表的基本配色方法

不论是商业图表还是专业图表&#xff0c;图表的配色都极其关键。图表配色主要有彩色和黑白两种配色方案。刘万祥老师曾提出&#xff1a; “在我看来&#xff0c;普通图表与专业图表的差别&#xff0c;很大程度就体现在颜色运用上。” 对于科学图表&#xff0c;大部分国内的期…

【Unity之FGUI】黑神章Fairy GUI控件详解

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

【MATLAB】基于VMD-SSA-GRU的回归预测模型

有意向获取代码&#xff0c;请转文末观看代码获取方式~ 1 基本定义 基于VMD-SSA-GRU的回归预测模型是一种集成了变分模态分解&#xff08;VMD&#xff09;、同步滑动平均&#xff08;SSA&#xff09;和门控循环单元&#xff08;GRU&#xff09;的复杂时间序列预测方法。下面将…

SaaS产品如何借助分销裂变实现爆发式增长?

在SaaS市场中&#xff0c;如何通过有效的推广方式实现产品的快速增长是每个企业都在思考的问题。分销裂变作为一种新兴的推广方式&#xff0c;以其低成本、高效率的特点&#xff0c;为SaaS产品的增长提供了新的可能。 一、分销裂变的基本原理 分销裂变是通过设置一定的奖励机…

一招搞定!家里灰尘多?教你如何轻松清理,推荐必备神器

在现代生活中&#xff0c;灰尘无处不在&#xff0c;特别是在大城市&#xff0c;空气中的污染物更多&#xff0c;导致家里的灰尘积聚速度加快。保持家居环境的干净和整洁不仅能提升生活质量&#xff0c;还能保护我们的健康。作为一名家电博主将为你提供详细的家里灰尘清理方法&a…

抖音里卖什么最赚钱?4个冷门的高利润商品,还有谁不知道!

哈喽~我的电商月月 做抖音小店的新手朋友&#xff0c;一定很想知道&#xff0c;在抖音里卖什么最赚钱&#xff1f; 很多人都会推荐&#xff0c;日常百货&#xff0c;小风扇&#xff0c;女装&#xff0c;宠物用品等等&#xff0c;这些商品确实很好做&#xff0c;你们可以试试 …

【跟着例子学MySQL】SQL进阶 -- 子查询和时间

文章目录 前言回顾子查询日期和时间未完待续 前言 举例子&#xff0c;是最简单有效的学习方法。本系列文章以一个贯穿始终的场景&#xff0c;结合多个实例讲解MySQL的基本用法。 ❔ 为什么要写这个系列&#xff1f; 模仿是最好的老师&#xff0c;实践是检验成果的方法。本系列…