06.Elasticsearch应用(六)

Elasticsearch应用(六)

1.什么是分词器

ES文档的数据拆分成一个个有完整含义的关键词,并将关键词与文档对应,这样就可以通过关键词查询文档。要想正确的分词,需要选择合适的分词器

2.ES中的默认分词器

  • fingerprint:删除所有符号,大写转小写,重复数据删除,排序,如果配置了停用词列表停用词也将被删除
  • keyword:不分词
  • language:用来分析特定语言文本的分析器
  • pattern:使用java正则表达式,默认非字符分割
  • english:英文分析器
  • simple:非字母切分,符号被过滤,所有均小写
  • standard:默认的,按词切分,所有均小写
  • stop:停用词过滤,其他与simple一样
  • whitespace:空格切分,不转小写

3.分词器的组成

介绍

  1. Character Filters: 在tokenizer之前对文本进行处理。例如删除字符、替换字符。主要是对原始文本的处理
  2. Tokenizer: 将文本按照一定的规则切割成词条(term)。例如keyword,就是不分词;还有ik_smart,可以用java开发插,实现自己的Tokenizer
  3. Tokenizer Filter: 将tokenizer输出的词条做进一步处理。例如大小写转换、同义词处理、拼音处理等。可能具有零个或多个按顺序应用的令牌过滤器

默认的Tokenizer

  • standard:按照符号,空格拆分
  • letter:非字母拆分为单词
  • whitespace:空格拆分
  • lowercase:等同于letter+lowercase token filter
  • uax_url_email:等同于standard+识别URL Email为单个单词
  • keyword:不做任何处理
  • pattern:默认模式是\W+,它在遇到非单词字符时会拆分文本
  • path_hierarchy:路径
  • char_group
  • simple_pattern
  • simple_pattern_split
  • classic(经典但是一般只适用于英文)
  • Thai Tokenizer(泰文分词器)
  • ngram
  • edge_ngram

默认的Character Filters

  • 可以配置多个,但会影响tokenizer的position和offset信息
  • html_strip:去除HTML标签
  • mapping:字符串替换
  • pattern_replace:正则匹配替换

默认的Token Filters

  • 将Tokenizer输出的单词,进行增加,修改,删除
  • Lowercase
  • stop
  • synonym

4.分词器API

请求全局分词器

GET /_analyze
{
    "analyzer":"分词器",
    "text":"被分词的文本"
}

请求某个索引下的分词器

POST /<index>/_analyze
{
    "field":"字段名",
    "text":"被分词的文本"
}

自定义分词器

POST /_analyze
{
    "tokenizer":"分词器",
    "filter":"Token Filter",
    "char_filter":"",
    "text":"被分词的文本"
}

5.指定分析器

# 指定索引的默认分析器
PUT my_index
{
  "settings": {
    "analysis": {
      "analyzer": {
        "default": {
          "type": "simple"
        }
      }
    }
  }
}

# 指定字段的分析器
PUT my_index
{
  "mappings": {
    "properties": {
      "title": {
        "type": "text",
        "analyzer": "whitespace"
      }
    }
  }
}

# 查询时指定分析器
GET my_index/_search
{
  "query": {
    "match": {
      "message": {
        "query": "Quick foxes",
        "analyzer": "stop"
      }
    }
  }
}

# 指定字段的搜索(search time)分析器
# 如果指定搜索分析器则必须指定索引分析器
PUT my_index
{
  "mappings": {
    "properties": {
      "title": {
        "type": "text",
        "analyzer": "whitespace",
        "search_analyzer": "simple"
      }
    }
  }
}

# 指定索引的默认分析器与搜索的默认分析器
# 如果提供了搜索分析器则必须指定默认的索引分析器
PUT my_index
{
  "settings": {
    "analysis": {
      "analyzer": {
        "default": {
          "type": "simple"
        },
        "default_search": {
          "type": "whitespace"
        }
      }
    }
  }
}

6.自定义分词器

说明

可以在创建索引库的时候,通过/settings来配置自定义的analyzer(分词器)

settings设置

PUT /<index>
{
    "settings":{
        "analysis":{
            "analyzer":{ // 自定义分词器
                "my_analyzer":{ // 自定义分词器名称
                    "tokenizer":"ik_max_word",
                    "filter":"pinyin"
                }
            }
        }
    }
}

自定义分词器

PUT /my_index
{
  "settings": {
    "analysis": {
      "analyzer": {
        "my_custom_analyzer":{
          "type":"custom",
          "char_filter":["emoticons"],
          "tokenizer":"punctuation",
          "filter":["lowercase","english_stop"]
        }
      },
      "tokenizer": {
        "punctuation":{
          "type":"pattern",
          "pattern":[".",",","!","?"]
        }
      },
      "char_filter": {
        "emoticons":{
          "type":"mapping",
          "mappings":[":) => _happy_",":( => _sad_"]
        }
      },
      "filter": {
        "english_stop":{
          "type":"stop",
          "stopwords":"_english_"
        }
      }
    }
  }
}

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

7.ES如何确定搜索分析器

  1. analyzer搜索查询中的参数
  2. search_analyzer字段的映射参数
  3. 默认分词器
  4. 字段分词器
  5. 如果这些都没指定就使用默认分词器

8.ES如何确定索引分析器

  1. analyzer字段的映射参数
  2. analysis.analyzer.default指数设置
  3. 如果未指定这些参数,则使用standard分析器

9.注意

  • ES仅text字段支持analyzer映射参数
  • analyzer参数指定索引或搜索字段时用于文本分析的分析器,除非使用search_analyzer映射参数覆盖,否则此分析器将同时用于索引和搜索分析

10.IK分词器

为什么需要

因为内置分词器不支持中文,可以看以下默认分词器对中文的效果展示
在这里插入图片描述

参考链接

ik分词器github地址:https://github.com/medcl/elasticsearch-analysis-ik/

介绍

  • 是一个ES的插件
  • 中文分词器
  • 支持自定义词典
  • ik有两种分词器分别是,ik_smart , ik_max_word

版本对应

IK版本ES版本
master7.x -> master
6.x6.x
5.x5.x
1.10.62.4.6
1.9.52.3.5
1.8.12.2.1
1.7.02.1.1
1.5.02.0.0
1.2.61.0.0
1.2.50.90.x
1.1.30.20.x
1.0.00.16.2 -> 0.19.0

下载地址

进入该网址https://github.com/medcl/elasticsearch-analysis-ik/releases

安装到ES中

第一种方式(需要下载zip文件)
  • 解压zip文件到ES目录下的plugins目录即可
  • 重启ES
第二种方式(版本需要大于5.5.1)
  • 进入到ES目录下的bin目录
  • 执行命令(自己更换版本)
#注意,请将版本替换为自己所需要的版本
./elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.7.1/elasticsearch-analysis-ik-7.7.1.zip

# 其他命令扩展
# 查看已安装插件
elasticsearch‐plugin list
# 安装插件
elasticsearch‐plugin install analysis‐icu
# 删除插件
elasticsearch‐plugin remove analysis‐icu
  • 重启ES

两种分词器介绍

  • ik_smart:会做最粗粒度的拆分,比如会将“中华人民共和国国歌”拆分为“中华人民共和国,国歌”,适合 Phrase 查询
  • ik_max_word:会将文本做最细粒度的拆分,比如会将“中华人民共和国国歌”拆分为“中华人民共和国,中华人民,中华,华人,人民共和国,人民,人,民,共和国,共和,和,国国,国歌”,会穷尽各种可能的组合,适合 Term Query

什么是词典

IK分词器根据词典进行分词,词典文件在lK分词器的config目录中

  1. main.dic: IK中内置的词典。记录了IK统计的所有中文单词
  2. IKAnalyzer.cfg.xml: 扩展词典

扩展字典

为什么需要扩展字典

因为ik分词器只识别默认的一些词语,有一些自造词无法识别例如‘骚年,极客时间,朋友圈’

配置扩展字典
  • 进入ik分词器目录下的config目录
  • 创建xxx.dic文件
  • 修改IKAnalyzer.cfg.xml文件
  • 修改内容
  • 重启ES
修改内容展示
#注意xxx.dic要与自己建立dic文件名一致
<?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">xxx.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>
xx.dic格式如下
十多年
李白
传智慧

11.拼音分词器

为什么需要拼音分词器

要实现根据字母做补全,就必须对文档按照拼音分词

安装拼音分词器参考IK的安装方式

拼音分词器官网:https://github.com/medcl/elasticsearch-analysis-pinyin

拼音分词器测试

POST /_analyze
{
    "text":"如家酒店还不错",
    "analyzer":"pinyin"
}

拼音分词器的问题

  1. 默认情况下,不会进行分词类似于keyword
  2. 默认情况下,把文本的每一个字都分为了一个拼音
  3. 默认情况下,汉字去掉了
  4. 同音字问题

同音字问题

拼音分词器适合在创建倒排索引的时候使用,但不能在搜索的时候使用,因为如果用户输入的是中文也会分词为拼音去匹配就会造成一些没用的文档,只希望输入中文就用中文查,用了拼音才用拼音分词器

在这里插入图片描述

自定义拼音分词器改造

  1. 使用自定义的分词器测试的时候需要指定索引库,里面不能直接去访问_analyzer那个API去测试,需要改为//_analyzer进行测试
  2. 在创建索引库的时候需要指定mapping中的某个字段的分词器为自定义分词器
    在这里插入图片描述

创建和搜索使用不同的分词器解决同音字问题

在这里插入图片描述

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

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

相关文章

OpenCV笔记之图像处理中遮罩和掩模的关系

OpenCV笔记之图像处理中遮罩和掩模的关系 code review 文章目录 OpenCV笔记之图像处理中遮罩和掩模的关系1.遮罩详解遮罩的创建遮罩的应用遮罩的主要应用遮罩的类型如何创建遮罩遮罩在图像处理中的应用方式 2.遮罩和掩模的关系 1.遮罩详解 在图像处理中&#xff0c;遮罩&#…

Linux笔记之bash脚本中的-e、和

Linux笔记之bash脚本中的-e、&和&& code review! 文章目录 Linux笔记之bash脚本中的-e、&和&&1.&和&&2.-e 1.&和&& 在Linux bash脚本中&#xff0c;&符号有几个不同的用途&#xff0c;这里列举了一些常见的情况&#xf…

文件IO讲解

&#x1f495;"跑起来就有意义"&#x1f495; 作者&#xff1a;Mylvzi 文章主要内容&#xff1a;文件IO讲解 一.与文件相关的基本概念 1.什么是文件 文件从广义上来说就是操作系统对其所持有的硬件设备和软件资源的抽象化表示,但是在日常生活中我们所提到的文件就…

三、Kotlin 类型初步

1. 类 & 接口 1.1 类的定义 1.1.1 空类的定义 Java 的定义&#xff1a; public class Foo {}Kotlin 的定义&#xff1a; class Foo注意&#xff1a; 类的访问权限修饰符默认为 public。 若类的 {} 为空&#xff0c;可以省略不写。 1.1.2 带成员的类的定义 Java 中定…

普通人如何打造自己人生的护城河?

哈喽&#xff0c;大家好啊&#xff0c;我是雷工。 今天在看《张一鸣管理日志》时看到这么一句话&#xff1a; 今日头条不断吸引更优秀的工程师&#xff0c;不断更新算法&#xff0c;才有了当前今日头条的算法护城河。 头条的算法有多牛&#xff0c;看你周边就知道了。 越来越多…

《剑指 Offer》专项突破版 - 面试题 28 : 展平多级双向链表(C++ 实现)

题目连接&#xff1a;LCR 028. 扁平化多级双向链表 - 力扣&#xff08;LeetCode&#xff09; 题目&#xff1a; 在一个多级双向链表中&#xff0c;节点除了有两个指针分别指向前后两个节点&#xff0c;还有一个指针指向它的子链表&#xff0c;并且子链表也是一个双向链表&…

CentOS7自动备份数据库到git

虽然数据库没什么数据&#xff0c;但是有就是珍贵的啦&#xff0c;为了服务器什么的无了&#xff0c;所以还是要自动备份一下比较好。 Open备忘第一页 步骤 在Gitee&#xff08;github&#xff09;上创建一个私有仓库Gitee&#xff08;github&#xff09;配置好服务器的ssh在服…

获取双异步返回值时,如何保证主线程不阻塞?

目录 一、前情提要二、JDK8的CompletableFuture1、ForkJoinPool2、从ForkJoinPool和ThreadPoolExecutor探索CompletableFuture和Future的区别 三、通过CompletableFuture优化 “通过Future获取异步返回值”1、通过Future获取异步返回值关键代码&#xff08;1&#xff09;将异步…

k8s的图形化工具--rancher

什么是rancher&#xff1f; rancher是一个开源的企业级多集群的k8s管理平台 rancher和k8s的区别 都是为了容器的调度和编排系统&#xff0c;但是rancher不仅能够调度&#xff0c;还能管理k8s集群&#xff0c;自带监控&#xff08;普罗米修斯&#xff09; 实验部署 实验架构…

大语言模型推理提速:TensorRT-LLM 高性能推理实践

作者&#xff1a;顾静 TensorRT-LLM 如何提升 LLM 模型推理效率 大型语言模型&#xff08;Large language models,LLM&#xff09;是基于大量数据进行预训练的超大型深度学习模型。底层转换器是一组神经网络&#xff0c;这些神经网络由具有 self-attention 的编码器和解码器组…

基于Java+SpringMvc+vue+element实现上海汽车博物馆平台

基于JavaSpringMvcvueelement实现上海汽车博物馆平台 &#x1f345; 作者主页 央顺技术团队 &#x1f345; 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; &#x1f345; 文末获取源码联系方式 &#x1f4dd; &#x1f345; 查看下方微信号获取联系方式 承接各种定制系统 …

《Visual Tree Convolutional Neural Network in Image Classification》阅读笔记

论文标题 《Visual Tree Convolutional Neural Network in Image Classification》 图像分类中的视觉树卷积神经网络 作者 Yuntao Liu、Yong Dou、Ruochun Jin 和 Peng Qiao 来自国防科技大学并行和分布式处理国家实验室 初读 摘要 问题&#xff1a; 在图像分类领域&…

JCL中常用的DD语句

JCL中的DD语句介绍 ​ DD语句&#xff0c;主要定义数据集用的&#xff0c;也叫做DATASET DEFINE&#xff0c;分为定义设备的UNIT、VOLUME、SPACE&#xff0c;定义数据集的DSN、DISP、DCB,详细可以看英文版的《MVS JCL Reference》&#xff0c;还有一些特殊的DD&#xff0c;暂时…

hdu1195 Open the lock 双向广度优先搜索

D-BFS 双向广度优先搜索 从起点和终点同时开始搜索&#xff0c;直到两个搜索的点相交&#xff0c;得到最短路径 Code: // D-BFS //by:MuQY #include <iostream> #include <algorithm> #include <string.h> #include <queue> #include <string> …

redis + 拦截器 :防止数据重复提交

1.项目用到,不是核心 我们干系统开发,不免要考虑一个点&#xff0c;数据的重复提交。 我想我们之前如果要校验数据重复提交要求&#xff0c;会怎么干?会在业务层&#xff0c;对数据库操作&#xff0c;查询数据是否存在,存在就禁止插入数据; 但是吧,我们每次crud操作都会连接…

Conda 使用environment.yml创建一个新的Python项目

Conda系列&#xff1a; 翻译: Anaconda 与 miniconda的区别Miniconda介绍以及安装Conda python运行的包和环境管理 入门Conda python管理环境environments 一 从入门到精通Conda python管理环境environments 二 从入门到精通Conda python管理环境environments 三 从入门到精通…

luceda ipkiss教程 58:输出器件的版图和三维模型

在ipkiss中&#xff0c;通过visualize_3d_povray可以输出包含器件的三维模型参数的.pov文件&#xff0c;再通过POV-Ray&#xff08;免费软件&#xff0c;下载地址&#xff1a;https://www.povray.org/download/&#xff09;就可以查看器件的三维模型。 如&#xff1a; 代码如…

账号定位基础

1.账号定位流程 定位体系 &#xff08;1&#xff09;商业定位 ①商业定位-带货 ②商业定位-引流 ③商业定位-接广告 ④商业定位-直播打赏 &#xff08;2&#xff09;内容定位 内容定位分为&#xff1a;主题IP、人物IP &#xff08;2-1&#xff09;主题IP ①有用处 ②有兴…

144基于matlab的平面桁架结构的总体刚度矩阵计算

基于matlab的平面桁架结构的总体刚度矩阵计算&#xff0c;最后以图形形式显示出桁架结构&#xff0c;程序已调通&#xff0c;可直接运行。 144matlab 平面桁架 有限元分析 总体刚度 (xiaohongshu.com)

0125-2-Vue深入学习1—mustache模板引擎原理

[mustache] 是 “胡子”的意思&#xff0c;因为它的嵌入标记 {{ }} 旋转过来很像[胡子]&#xff0c;Vue中的 {{ }} 语法也引用了mustache&#xff0c;这也是我深入学习的目的。 1、原始js方式使 数据 变为视图 <ul id"list"></ul><script>var arr …