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中的某个字段的分词器为自定义分词器
    在这里插入图片描述

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

在这里插入图片描述

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

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

相关文章

15- OpenCV:模板匹配(cv::matchTemplate)

目录 1、模板匹配介绍 2、cv::matchTemplate 3、模板匹配的方法&#xff08;算法&#xff09; 4、代码演示 1、模板匹配介绍 模板匹配就是在整个图像区域发现与给定子图像匹配的小块区域。 它可以在一幅图像中寻找与给定模板最相似的部分。 模板匹配的步骤&#xff1a; &a…

Unity中URP下计算额外灯的方向

文章目录 前言一、为什么额外灯的方向&#xff0c;不像主平行灯一样直接获取&#xff1f;1、主平行灯2、额外灯中&#xff0c;包含 点光源、聚光灯 和 平行灯 二、获得模型顶点指向额外灯的单位向量三、Unity中的实现 前言 在上一篇文章中&#xff0c;我们获取了URP下额外灯的…

eNSP学习——交换机配置Trunk接口

目录 原理概述 实验内容 实验目的 实验步骤 实验拓扑 实验编址&#xff1a; 试验步骤 基本配置 创建VLAN&#xff0c;配置Access接口 配置Trunk接口 思考题 原理概述 在以太网中&#xff0c;通过划分VLAN来隔离广播域和增强网络通信的安全性。以太网通常由多台交换机组…

探索HTMLx:强大的HTML工具

1. HTMLX htmx 是一个轻量级的 JavaScript 库&#xff0c;它允许你直接在 HTML 中使用现代浏览器的功能&#xff0c;而不需要编写 JavaScript 代码。通过 htmx&#xff0c;你可以使用 HTML 属性执行 AJAX 请求&#xff0c;使用 CSS 过渡动画&#xff0c;利用 WebSocket 和服务…

什么叫概率分布?

概率分布是描述随机变量可能取值及其相应概率的数学函数或规律。它提供了随机变量在各个取值上的概率信息&#xff0c;用于表示随机现象的不确定性和随机性。 概率分布可以分为两类&#xff1a;离散概率分布和连续概率分布。 1. 离散概率分布&#xff1a; 适用于描述离散随机…

vue3和vite项目在scss中因为本地图片,不用加~

看了很多文章说要加~&#xff0c;真的好坑哦&#xff0c;我的加了~反而出不来了&#xff1a; 304 Not Modified 所以需要去掉~&#xff1a; /* 默认dark主题 */ :root[themered] {--bg-color: #0d1117;--text-color: #f0f6fc;--backImg: url(/assets/images/redBg.png); }/* …

磺化-Cy5-左旋聚乳酸,Sulfo-Cyanine5-PLLA,一种生物相容性良好的生物降解材料

您好&#xff0c;欢迎来到新研之家 文章关键词&#xff1a;磺化-Cy5-左旋聚乳酸&#xff0c;Sulfo-Cyanine5-PLLA&#xff0c;Sulfo-Cyanine5-Poly(L-lactic acid) 一、基本信息 产品简介&#xff1a;Sulfo Cy5 PLLA, also known as sulfonated Cyanine5 L-polylactic acid,…

Scapy编程指南(基础概念)

Scapy编程指南&#xff08;基础概念&#xff09; Scapy是什么 Scapy是Python中一个非常强大的库&#xff0c;它专门用于处理、发送和捕获网络协议中的数据包&#xff0c;它允许开发人员通过Python代码构建、解析和发送自定义网络协议的数据包。Scapy提供了一种直观、灵活的方…

开始学习Vue2(axios和Vuex)

一、Axios 1、Axios 简介 Axios 是一个基于 promise 网络请求库 &#xff0c;作用于node.j s 和浏 览器中。它是 isomorphic 的(即同一套代码可以运行在浏览器 和 node.js 中)。在服务端它使用原生 node.js http 模块, 而在 客户端 (浏览端) 则使用 XMLHttpRequests。 …

基于python豆瓣电影评论的情感分析和聚类分析,聚类分析有手肘法进行检验,情感分析用snownlp

基于Python的豆瓣电影评论的情感分析和聚类分析是一种用于探索电影评论数据的方法。 情感分析 情感分析旨在从文本中提取情感信息&#xff0c;并对其进行分类&#xff0c;如正面、负面或中性。在这里&#xff0c;我们使用了一个名为snownlp的Python库来进行情感分析。Snownlp是…

Redis入门到实战-基础篇+实战篇+高级篇+原理篇

Redis入门到实战-基础篇实战篇高级篇原理篇 文章目录 Redis入门到实战-基础篇实战篇高级篇原理篇一、基础篇二、实战篇三、高级篇四、原理篇 一、基础篇 1.基础篇笔记&#xff1a;https://blog.csdn.net/cygqtt/article/details/126974142 二、实战篇 1.实战篇笔记&#xff1a;…

Java项目:基于SSM框架实现同城蔬菜配送管理系统(SSM+B/S架构+源码+数据库+毕业论文)

一、项目简介 本项目是一套ssm825基于SSM框架实现同城蔬菜配送管理系统&#xff0c;主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Java学习者。 包含&#xff1a;项目源码、数据库脚本等&#xff0c;该项目附带全部源码可作为毕设使用。 项目都经过严格调试&…

web前端javascript笔记——(14)Navigator 、History、Location

Navigator <!DOCTYPE html><head><meta charset"UTF-8"><title></title><style></style><script type"text/javascript">/*DOM文档对象&#xff0c;通过js操作网页BOM 浏览器对象BOM可以使我们通过JS来操…

HarmonyOS4.0系统性深入开发26方舟开发框架(ArkUI)概述

方舟开发框架&#xff08;ArkUI&#xff09;概述 方舟开发框架&#xff08;简称ArkUI&#xff09;为HarmonyOS应用的UI开发提供了完整的基础设施&#xff0c;包括简洁的UI语法、丰富的UI功能&#xff08;组件、布局、动画以及交互事件&#xff09;&#xff0c;以及实时界面预览…

林浩然的数学奇遇记:从计算机视觉到深海中的数学宝藏

林浩然的数学奇遇记&#xff1a;从计算机视觉到深海中的数学宝藏 Lin Haoran’s Mathematical Odyssey: From Computer Vision to Mathematical Treasures in the Deep Sea 在那个充满像素与算法的世界里&#xff0c;有一位名叫林浩然的主角&#xff0c;他并非怀揣着成为华罗庚…

【视野提升】ChatGPT的系统是如何工作的?

类似ChatGPT的系统是如何工作的&#xff1f; 我们试图在下图中解释它是如何工作的。这个过程可以分为两个部分。 训练 要训练一个ChatGPT模型&#xff0c;有两个阶段&#xff1a; 预训练 在这个阶段&#xff0c;我们在大量互联网数据上训练一个GPT模型&#xff08;仅解码器转…

【mongoDB】数据库的创建和删除

目录 1. 查看所有数据库 2.创建数据库 3.查看当前连接的数据库 4.删除数据库 1. 查看所有数据库 show dbs 2.创建数据库 use 数据库名 例如创建一个名为 aaa 的数据库 3.查看当前连接的数据库 db 4.删除数据库 use 数据库名 db.dropDataBase() 比如删除数据库 aaa

《WebKit技术内幕》学习之十三(3):移动WebKit

3 其他机制 3.1 新渲染机制 为了移动领域更好的用户体验&#xff0c;渲染机制所做的改进主要是提升渲染性能来增加响应的速度&#xff0c;甚至不惜牺牲一些跟规范定义的行为不一致的地方。在这一小节中主要介绍三个方面的技术&#xff0c;其一是Tiled Backing Store&#x…

vue3 组件通信 mitt

mitt 安装 pnpm add mitttypescript 在 tsconfig.json 中设置 “strict”: true {"compilerOptions": {"strict": true,} }使用 导出 emitter src/utils/mitt/index.ts import mitt from mitttype Events {get-name: string }export const emitter …

[Python] 机器学习 - 常用数据集(Dataset)之鸢尾花(Iris)数据集介绍,数据可视化和使用案例

鸢(yuān)尾花(Iris)数据集介绍 鸢【音&#xff1a;yuān】尾花&#xff08;Iris&#xff09;是单子叶百合目花卉&#xff0c;是一种比较常见的花&#xff0c;而且鸢尾花的品种较多&#xff0c;在某个公园里你可能不经意间就能碰见它。 鸢尾花数据集最初由Edgar Anderson 测量…