【ES】--Elasticsearch的分词器深度研究

目录

  • 一、问题描述及分析
  • 二、analyze分析器原理
  • 三、 multi-fields字段支持多场景搜索(如同时简繁体、拼音等)
    • 1、ts_match_analyzer配置分词
    • 2、ts_match_all_analyzer配置分词
    • 3、ts_match_1_analyzer配置分词
    • 4、ts_match_2_analyzer配置分词
    • 5、ts_match_3_analyzer配置分词
    • 6、ts_match_4_analyzer配置分词
    • 7、ts_match_5_analyzer配置分词
    • 8、ts_match_kw_analyzer配置分词

一、问题描述及分析

面对现实很多复杂情况,默认的ES搜索引擎方式已经不能支持。下面将针对常见的问题进行分析,如何使用ES的分词器达到预定效果。
常见有ik、pinyin、tsconvert三种分词器,
elasticsearch-analysis-ik
elasticsearch-analysis-pinyin
elasticsearch-analysis-stconvert

现有问题场景要求
(1)、对检索结果,要能同时搜索到简繁体、能搜索到拼音等
(2)、搜索的结果不要太零散(不要把关键词分成一个一个的字)
(3)、不希望搜索的关键词匹配到语气助词
(4)、一些特定的词语(如’中国的炎黄子孙’)不希望被分词,要能够整体匹配
面对上面等问题,分析如下:
(1)、对检索结果,要能同时搜索到简繁体、能搜索到拼音等
—对要搜索的字段进行multi-fields属性设置,使该字段能满足多场景的搜索
(2)、搜索的结果不要太零散(不要把关键词分成一个一个的字)
—ES默认的standard分词器会把汉字分为一个个汉字。ik分词器主要有ik_smart【最少切分,最粗精度】、ik_max_word【最多切分,最细精度】两种模式。
(3)、不希望搜索的关键词匹配到语气助词
—使用“停用词”来过滤掉语气助词。排除停用词可以加快建立索引的速度,减小索引库文件的大小,并且还可以提高查询的准确度。【参考https://blog.csdn.net/qq_29864051/article/details/124831207】
(4)、一些特定的词语(如’中国的炎黄子孙’)不希望被分词,要能够整体匹配
—可以通过对ik分词器添加自定义词典。另外,为了切换实际场景,可以采用“热更新自定义词典”方案。

二、analyze分析器原理

在这里插入图片描述
Char Filter:字符过滤器的工作是执行清除任务,例如剥离 HTML 标记,还有上面的把 “&” 转换为 “and” 字符串。
Tokenizer:将文本基于任何规则拆分为称为标记的术语。一般此时如ik分词器的模式起作用。
Token filter:一旦创建了token,它们就会被传递给 token filter,这些过滤器会对 token 进行规范化。 Token filter 可以更改 token,删除术语或向 token 添加术语。

三、 multi-fields字段支持多场景搜索(如同时简繁体、拼音等)

给某个字段设置多个属性的fields。如下所示

   "file_extension": {
   
          "type": "text",
          "fields": {
   
            "keyword": {
   
              "type": "keyword",
              "ignore_above": 256,
              "normalizer": "lowercase_normalizer"
            },
            "pinyin": {
   
              "type": "text",
              "analyzer": "pinyin_analyzer"
            },
            "pure": {
   
              "type": "text",
              "analyzer": "ts_match_all_analyzer"
            },
            "pure1": {
   
              "type": "text",
              "analyzer": 

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

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

相关文章

2024年智能算法优化PID参数,ITAE、ISE、ITSE、IAE四种适应度函数随意切换,附MATLAB代码...

PID 参数整定就是确定比例系数(Kp )、积分系数(Ki)和微分系数(Kd )的过程,以便使 PID 控制器能够在系统中实现稳定、快速、准确的响应。 本期的主题 采用四种2024年的智能优化算法优化PID的三个…

《Java 简易速速上手小册》第6章:Java 并发编程(2024 最新版)

文章目录 6.1 线程的创建和管理 - 召唤你的士兵6.1.1 基础知识6.1.2 重点案例:实现一个简单的计数器6.1.3 拓展案例 1:定时器线程6.1.4 拓展案例 2:使用 Executor 框架管理线程 6.2 同步机制 - 维持军队的秩序6.2.1 基础知识6.2.2 重点案例&a…

pytorch花式索引提取topk的张量

文章目录 pytorch花式索引提取topk的张量问题设定代码实现索引方法gather方法验证 补充知识expand方法gather方法randint pytorch花式索引提取topk的张量 问题设定 或者说,有一个(bs, dim, L)的大张量,索引的index形状为(bs, X),想得到一个(…

Java 基于 SpringBoot 的大药房管理系统

博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…

备战蓝桥杯---动态规划(入门1)

先补充一下背包问题: 于是,我们把每一组当成一个物品,f[k][v]表示前k组花费v的最大值。 转移方程还是max(f[k-1][v],f[k-1][v-c[i]]w[i]) 伪代码(注意循环顺序): for 所有组: for vmax.....0…

使用Word Embedding+Keras进行自然语言处理NLP

目录 介绍: one-hot: pad_sequences: 建模: 介绍: Word Embedding是一种将单词表示为低维稠密向量的技术。它通过学习单词在文本中的上下文关系,将其映射到一个连续的向量空间中。在这个向量空间中,相似的单词在空间…

实现JNDI

实现JNDI 问题陈述 Smart Software Developer Ltd.想要开发一款Web应用程序,它使用servlt基于雇员ID显示雇员信息,雇员ID由用户通过HTML用户界面传递。雇员详细信息存储在Employee_Master表中。另外,Web应用程序应显示网站被访问的次数。 解决方案 要解决上述问题,需要执…

2024.2.6 模拟实现 RabbitMQ —— 数据库操作

目录 引言 选择数据库 环境配置 设计数据库表 实现流程 封装数据库操作 针对 DataBaseManager 单元测试 引言 硬盘保存分为两个部分 数据库:交换机(Exchange)、队列(Queue)、绑定(Binding&#xff0…

腾讯云4核8G服务器够用吗?能支持多少人?

腾讯云4核8G服务器支持多少人在线访问?支持25人同时访问。实际上程序效率不同支持人数在线人数不同,公网带宽也是影响4核8G服务器并发数的一大因素,假设公网带宽太小,流量直接卡在入口,4核8G配置的CPU内存也会造成计算…

webpack面试解析

参考: 上一篇webpack相关的系列:webpack深入学习,搭建和优化react项目 爪哇教育字节面试官解析webpack-路白 1、Webpack中的module是什么? 通常来讲,一个 module 模块就是指一个文件中导出的内容,webpack…

全国计算机等级考试二级,MySQL数据库考试大纲(2023年版)

基本要求: 1.掌握数据库的基本概念和方法。 2.熟练掌握MySQL的安装与配置。 3.熟练掌握MySQL平台下使用SQL语言实现数据库的交互操作。 4.熟练掌握 MySQL的数据库编程。 5.熟悉 PHP 应用开发语言,初步具备利用该语言进…

Vue-自定义属性和插槽(五)

目录 自定义指令 基本语法 (全局&局部注册) 指令的值 练习:v-loading 指令封装 总结: 插槽(slot) 默认插槽 插槽 - 后备内容(默认值) 具名插槽 具名插槽基本语法: 具名插槽简化语法: 作…

RocksDB:高性能键值存储引擎初探

在现代的分布式系统和大数据应用中,一个高效、可靠的存储引擎是不可或缺的。RocksDB,由Facebook于2012年开发并随后开源,正是为了满足这类需求而诞生的。它是一个持久化的键值存储系统,特别适合在闪存(Flash&#xff0…

AtCoder Beginner Contest 340 C - Divide and Divide【打表推公式】

原题链接:https://atcoder.jp/contests/abc340/tasks/abc340_c Time Limit: 2 sec / Memory Limit: 1024 MB Score: 300 points 问题陈述 黑板上写着一个整数 N。 高桥将重复下面的一系列操作,直到所有不小于2的整数都从黑板上移除: 选择…

SCI论文作图规范

SCI论文作图规范包括以下几个方面: 一、图片格式 SCI论文通常接受的图片格式包括TIFF、EPS和PDF等。其中,TIFF格式是一种高质量的图像格式,适用于需要高分辨率和颜色准确性的图片;EPS格式是一种矢量图形格式,适用于需…

Leetcode 1035 不相交的线

题意理解: 在两条独立的水平线上按给定的顺序写下 nums1 和 nums2 中的整数。 现在,可以绘制一些连接两个数字 nums1[i] 和 nums2[j] 的直线,这些直线需要同时满足满足: nums1[i] nums2[j]且绘制的直线不与任何其他连线&#xff…

Spring 事务

Spring 事务传播(Propagation)特性 REQUIRED 支持一个当前的事务,如果不存在创建一个新的。SUPPORTS 支持一个当前事务,如果不存在以非事务执行。MANDATORY 支持一个当前事务,如果不存在任何抛出异常。REQUIRES_NEW 创…

百面嵌入式专栏(面试题)驱动开发面试题汇总 2.0

沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇我们将介绍驱动开发面试题 。 1、Linux系统的组成部分? Linux内核、Linux文件系统、Linux shell、Linux应用程序。 2、Linux内核的组成部分? (1)第一种分类方式:内存管理子系统、进程管理子系统、文件管理子系…

react【六】 React-Router

文章目录 1、Router1.1 路由1.2 认识React-Router1.3 Link和NavLink1.4 Navigate1.5 Not Found页面配置1.6 路由的嵌套1.7 手动路由的跳转1.7.1 在函数式组件中使用hook1.7.2 在类组件中封装高阶组件 1.8 动态路由传递参数1.9 路由的配置文件以及懒加载 1、Router 1.1 路由 1.…

VC++ 绘制折线学习

win32 有三个绘制折线的函数; Polyline,根据给定点数组绘制折线; PolylineTo,除了绘制也更新当前位置; PolyPolyline,绘制多条折线,第一个参数是点数组,第二个参数是一个数组、指…