Elasticsearch 分析器的高级用法一(同义词,高亮搜索)
Elasticsearch 分析器的高级用法一(同义词,高亮搜索)
- 同义词
- 简介
- 分析使用
- 同义词案例
- 高亮搜索
- 高亮搜索策略
- unified
- plain
- vh
同义词
简介
在搜索场景中,同义词用来处理不同的查询词,有可能是想表达相同的搜索目标。
例如:查询“北京大学”和“北大”时,其实时想搜索同一个内容。
在ES内置的分词过滤器中,有两个同义词分词过滤器(synonym 和 synonym_graph)
官网:
synonym: https://www.elastic.co/guide/en/elasticsearch/reference/7.10/analysis-synonym-tokenfilter.html
synonym_graph: https://www.elastic.co/guide/en/elasticsearch/reference/7.10/analysis-synonym-graph-tokenfilter.html
synonym_graph 相对于 synonym 对于多词同义词有更精确的效果

官方建议,在索引时使用 synonym ,在 查询时 使用 synonym_graph
分析使用
可以借助同义词过滤器实现 同义词分析器
指定同义词内容,有两种方式
- 直接通过synonyms 指定,同义词用 , 分割
# synonym
POST _analyze
{"tokenizer": "ik_smart","filter": {"type": "synonym","synonyms": ["北京大学, 北大"]},"text": "北京大学"
}
- 通过文件方式指定 同义词
- 在 es/config 目录下 创建文件 analysis/synonym.txt
- 在 synonym.txt 中编辑同义词内容
# 通过文件方式指定同义词
POST _analyze
{"tokenizer": "ik_smart","filter": {"type": "synonym","synonyms_path": "analysis/synonym.txt"},"text": "北京大学"
}
上述两种请求方式,结果相同,如下:

从结果可以看出,北京大学 和 北大 都被当做同义词分析。
同义词案例
案例要求:通过大学简称或全称都能搜索到对应大学的内容
-
创建大学索引
# 创建一个索引 # 包含一个text字段,索引分析器为 ik_smart # 搜索分析器为自定义的 同义词分析器,同义词内容在analysis/synonym.txt 中 # "updateable": true 表示允许动态修改同义词 PUT /college {"settings": {"index": {"analysis": {"analyzer": {"my_synonyms": {"tokenizer": "ik_smart","filter": [ "synonym" ]}},"filter": {"synonym": {"type": "synonym_graph","synonyms_path": "analysis/synonym.txt", "updateable": true }}}}},"mappings": {"properties": {"name": {"type": "text","analyzer": "ik_smart","search_analyzer": "my_synonyms" }}} } -
指定同义词
在 analysis/synonym.txt 文件中 写入同义词 ”北京大学,北大“
-
初始化数据
POST /college/_bulk {"index":{}} {"content":"北大,国内最高学府"} {"index":{}} {"content":"北外,中华人民共和国教育部直属的全国重点大学,211"} -
测试搜索
GET /college/_search {"query": {"match": {"content": "北京大学"}} }
-
修改同义词文件
上述同义词文件中,没有指定 北外 和 北京外国语。所以直接搜索北京外国语大学是没有结果的。
这时,我们需要动态的添加新的 同义词。
ES官方提供了 修改分析器资源的 APIPOST /{index}/_reload_search_analyzers
并要求必须指定"updateable": true我在创建索引时 ,已经指定了
"updateable": true,这里可以直接修改 synonym.txt 文件a. 添加 同义词
echo 北京外国语大学,北外,北京外国语 >> synonym.txt
b. 发送请求 重新加载分析器资源
POST /college/_reload_search_analyzers -
测试搜索
GET /college/_search {"query": {"match": {"content": "北京外国语大学"}} }
高亮搜索
“高亮显示”的英文为highlight,是指在搜索结果中通过对文档标题的部分匹配字符串进行颜色(如红色)或者字体(如加粗)等处理,在视觉呈现上使匹配的字符串与未匹配的字符串有明显的区分效果。
ES 提供了高亮搜索功能
下面搜索content 字段,并对搜索内容进行高亮显示
PUT /light
{"mappings": {"properties": {"content":{"type":"text"}}}
}POST /light/_bulk
{"index":{}}
{"content":"北京大学,国内最高学府,211,985"}
{"index":{}}
{"content":"北京,中国首都,帝都"}GET /light/_search
{"_source": "content","query": {"match": {"content": "北京"}},"highlight": {"fields": {"content": {// 设定 高亮搜索策略,默认是unified"type":"plain",// 设定 高亮标签,默认是<em></em>"pre_tags": "<hight>","post_tags": "</hight>"}}}
}

高亮搜索策略
ES支持的高亮显示搜索策略有plain、unified和fvh,用户可以根据搜索场景进行选择。
unified
默认策略
unified策略是由Lucene Unified Highlighter来实现的,其使用BM25(Best Match25)算法进行匹配
plain
plain是精准度比较高的策略,因此它必须将文档全部加载到内存中,并重新执行查询分析。由此可见,plain策略在处理大量文档或者大文本的索引进行多字段高亮显示搜索时耗费的资源比较严重。因此plain策略适合在单个字段上进行简单的高亮显示搜索。
vh
为了弥补上述两种策略在大文本索引高亮显示搜索时的速度低问题,Lucene还提供了基于向量的高亮显示搜索策略fvh(fast vector highlighter)。fvh策略更适合在文档中包含大字段的情况(如超过1MB)下使用,如果计算机的I/O性能更好(如使用SSD),则fvh策略在速度上的优势更加明显。
如果要使用fvh策略进行高亮显示搜索,需要设定字段的 term_vector属性值为with positions offsets。
相关文章:
Elasticsearch 分析器的高级用法一(同义词,高亮搜索)
Elasticsearch 分析器的高级用法一(同义词,高亮搜索) 同义词简介分析使用同义词案例 高亮搜索高亮搜索策略unifiedplainvh 同义词 简介 在搜索场景中,同义词用来处理不同的查询词,有可能是想表达相同的搜索目标。 例…...
Python 开心消消乐
💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…...
mysql - 索引基本知识梳理
mysql索引基本知识梳理 索引介绍 官方介绍索引是帮助MySQL高效获取数据的数据结构, 原理为以空间换时间, mysql的索引采用的是B树的结构 索引的优缺点 优点: 提高查询效率降低数据库IO成本通过索引对数据进行排序, 降低排序成本, 降低CPU消耗 缺点:…...
Nginx SSL/TLS配置:搭建安全的HTTPS网站
随着互联网安全性的日益提升,HTTPS已经成为网站安全通信的标配。Nginx作为一款高性能的HTTP和反向代理服务器,支持SSL/TLS协议,使得我们可以轻松地搭建安全的HTTPS网站。下面,我们将详细介绍如何在Nginx上配置SSL/TLS,…...
echarts 折线图流光效果偏移或不显示
x轴数据需要字符串数组...
Redis数据类型(上篇)
前提:(key代表键) Redis常用的命令 命令作用keys *查看当前库所有的keyexists key判断某个key是否存在type key查看key是什么类型del key 删除指定的keyunlink key非阻塞删除,仅仅将keys从keyspace元数据中删除,真正的…...
VMware虚拟机安装Linux
1.下载Linux的ISO镜像文件 阿里镜像源网站: https://developer.aliyun.com/mirror/ 清华大学镜像源网站: https://mirrors.tuna.tsinghua.edu.cn/本人选择的是:Centos7.9.2009标准版 https://mirrors.tuna.tsinghua.edu.cn/centos/7.9.2009/isos/x86_64/ 标准版&a…...
slurm是什么,怎么用? For slurm和For Pytorch有什么区别和联系?
1.slurm是什么? Slurm(Simple Linux Utility for Resource Management)是一种开源的、用于集群和超级计算机的作业调度系统。它主要用于管理和调度大规模计算任务,使得用户可以有效地利用集群中的计算资源。Slurm提供了一套功能强…...
类和对象【六】友元和内部类
文章目录 友元友元的作用友元的缺点友元函数语法:特点: 友元类语法:特点: 内部类概念特点 友元 友元的作用 友元提供了一种打破封装的方式,有时提供了便利。 友元的主要作用就是打破封装 即可以让一个类的友元函数…...
一点点 cv 经验 1:cv方向、模型评估、输入尺寸、目标检测器设计
一点点 cv 经验 1:cv方向、模型评估、输入尺寸、目标检测器设计 cv 方向Pytorch数据集划分 模型评估误差偏差方差噪声 输入尺寸方法一:让数据适应模型方法二:修改模型适应数据方法三:划分Patch,分别处理 目标检测器结构…...
Java-SpringBoot集成Langchain4j文本嵌入模型实现向量相似度查询
集成Pg数据库并创建vector字段类型 运行pgvector容器 根据需要进行容器目录挂载 docker run --name pgvector \-e POSTGRES_PASSWORD123456 \-p 5432:5432 \-d --platform linux/amd64 ankane/pgvector:latest 进入docker容器并创建vector字段类型 docker exec -it pgvecto…...
正宇软件:引领数字人大新纪元,开启甘肃人大代表履职新篇章
在数字化强国的主旋律之下,政府工作的数字化、智能化转型已成为提升治理效能、增强人民满意度的关键一环。在这个大背景下,正宇软件技术开发有限公司以其卓越的技术实力和丰富的行业经验,成为了政府信息化建设的杰出代表。甘肃省人大代表履职…...
UniApp中,在页面显示时触发子组件的重新渲染
在UniApp中,要在页面显示时触发子组件的重新渲染,可以利用生命周期钩子函数来实现。具体来说,可以在页面的onShow生命周期钩子中调用子组件的方法或者改变子组件的props,从而触发子组件的重新渲染。 首先,确保子组件有…...
Linux(三)
Linux(三) Linux网络配置管理网络基础知识 IP地址A类 由1个字节网络地址3个字节主机地址B类 由2个字节网络地址2个主机地址C类 由3个字节网络地址1个主机地址D类:主要用于组播E类:为将来使用保留 子网掩码子网掩码作用网关DNS服务器 Linux用户管理用户的…...
2024年郫都区区级农业生产社会化服务重点服务组织评定申报条件材料、程序要求
第一章 总 则 第一条 为深入贯彻《中共中央办公厅 国务院办公厅关于促进小农户和现代农业发展有机衔接的意见》《农业农村部关于加快发展农业社会化服务的指导意见》精神,充分发挥农业生产社会化服务组织在引领现代农业发展、打造新时代更高水平“天府粮仓”郫都…...
Java入门须知术语
文章目录 前言JVM (Java Virtual Machine)JVM的组成部分JVM的作用为什么需要JVM JRE(Java Runtime Environment)JRE的组成部分JRE的作用为什么需要JRE JDK(Java Development Kit,Java开发工具包)JDK的组成部分JDK的作用…...
Spring Boot中集成WebSocket
目录 WebSocket简介WebSocket原理WebSocket的使用场景在Spring Boot中集成WebSocket 创建Spring Boot项目添加依赖配置WebSocket创建WebSocket处理器配置WebSocket端点前端使用WebSocket添加WebSocket拦截器 WebSocket简介 WebSocket是一种在单个TCP连接上进行全双工通信的…...
18.多分类问题代码实现
在机器学习中,多分类问题是一类常见的问题,它涉及到将输入数据划分为多个类别中的一个。例如,在图像识别中,我们可能需要将图像分为不同的类别,如手写数字识别(MNIST数据集)就是将手写数字图像分…...
实时通信的方式——WebRTC
文章目录 基于WebRTC实现音视频通话P2P通信原理如何发现对方? 不同的音视频编解码能力如何沟通?(媒体协商SDP)如何联系上对方?(网络协商) 常用的API音视频采集getUserMedia核心对象RTCPeerConne…...
Android 使用 ActivityResultLauncher 申请权限
前面介绍了 Android 运行时权限。 其中,申请权限的步骤有些繁琐,需要用到:ActivityCompat.requestPermissions 函数和 onRequestPermissionsResult 回调函数,今天就借助 ActivityResultLauncher 来简化书写。 步骤1:创…...
马尔可夫过程图解指南:为什么强化学习必须掌握这个数学概念?
马尔可夫过程图解指南:为什么强化学习必须掌握这个数学概念? 想象你正在规划一次周末出行:如果今天是晴天,明天有70%概率继续放晴;如果今天下雨,明天转晴的概率只有30%。这种"未来只依赖现在"的思…...
自动化内容创作:OpenClaw+Qwen3.5-9B批量处理游记照片生成博客
自动化内容创作:OpenClawQwen3.5-9B批量处理游记照片生成博客 1. 为什么需要自动化内容创作流水线 去年夏天我从西藏旅行回来,手机里存了800多张照片。当我坐在电脑前准备写游记时,面对海量素材突然感到无从下手——每张照片都需要回忆拍摄…...
从命令到思想:Shell脚本编程的“一课一得”
引言在Linux系统学习的旅程中,Shell脚本编程是一个绕不开的重要关卡。在此之前,我们只是在命令行中逐条输入指令,像一个机械的执行者;在此之后,我们开始将自己的思路封装成可复用的逻辑,成为一个真正的设计…...
中小卖家最怕买“大而全”,真正需要的是“刚刚好”的自动化方案
很多中小卖家一听到“AI自动化”“全链路智能体”这些词, 心里会先紧张一下。 不是不感兴趣, 而是怕另一个问题: 看起来很强,但太大了; 功能很多,但太重了; 概念很全,但不一定适合自…...
LDC1101嵌入式驱动开发:电感-数字转换器SPI控制与实时优化
1. LDC1101嵌入式驱动库深度解析:高精度电感-数字转换器的底层控制实践LDC1101是德州仪器(TI)推出的一款高分辨率、高速度电感-数字转换器(Inductance-to-Digital Converter),专为非接触式位置检测、金属物…...
小型团队应用:3人使用OpenClaw+SecGPT-14B协作安全审计
小型团队应用:3人使用OpenClawSecGPT-14B协作安全审计 1. 为什么我们需要协作式安全审计工具 去年我们团队接手了一个金融系统的安全审计项目,三个人需要在一周内完成代码审计、漏洞扫描和报告撰写。最初我们尝试用传统方式:各自用本地工具…...
OpenClaw多模型切换术:Gemma-3-12b-it与Qwen3-32B混合调用指南
OpenClaw多模型切换术:Gemma-3-12b-it与Qwen3-32B混合调用指南 1. 为什么需要多模型混合调用? 去年我在用OpenClaw自动化处理技术文档时,发现一个有趣现象:当让AI帮我写Python脚本时,Qwen3-32B表现优异;但…...
USB MIDI嵌入式库:跨平台Arduino MIDI通信方案
1. USBMIDI库概述:面向嵌入式开发者的USB MIDI通信解决方案USBMIDI是一个专为Arduino平台设计的轻量级USB MIDI协议栈,其核心目标并非简单复刻标准MIDI接口功能,而是构建一套可无缝迁移、低侵入式集成、硬件抽象完备的底层通信框架。该库不依…...
CCLE数据库实战指南:从数据下载到肝癌细胞系分析
1. CCLE数据库入门指南 第一次接触CCLE数据库时,我和大多数新手一样感到无从下手。这个由Broad研究所维护的癌症细胞系百科全书,包含了超过1000种人类癌症细胞系的基因组、转录组和药理学数据。对于肝癌研究者来说,它就像一座待挖掘的金矿。 …...
安卓开发者必看:解决Google Play服务报错的5种实战方法(附工具推荐)
安卓开发者必看:解决Google Play服务报错的5种实战方法(附工具推荐) 在安卓应用开发过程中,Google Play服务(Google Play Services)的集成几乎是不可避免的——无论是地图服务、支付功能,还是推…...

