ElasticSearch DSL查询之高亮显示

什么是高亮显示?

高亮显示是指在搜索结果中,将用户搜索的关键字突出显示,使其更为醒目。以百度搜索为例,当用户搜索“JAVA”时,搜索结果中的标题或概述部分会将“JAVA”高亮显示,通常以红色标出,便于用户查看。




高亮显示的实现原理

高亮显示的实现原理可以分为两个步骤:

  • 步骤一: 在页面中找到搜索结果中与搜索关键字相关的词条,并将这些词条包裹在 HTML 标签内(如 <em> 标签)。
  • 步骤二: 在页面的 CSS 中指定这些标签的样式,比如设置颜色为红色,来达到高亮显示的效果。



前端与后端的角色

  • 前端: 负责页面布局和样式的设计,但由于前端无法预知用户的搜索关键字,因此无法提前在页面中修改内容或添加标签。
  • 后端: 在接收到用户的查询请求后,后端根据查询条件返回相关数据,并在返回的数据中为匹配的关键词添加标签,确保页面展示时能够正确地显示高亮效果。



倒排索引与高亮显示

Elasticsearch 使用倒排索引来存储数据,倒排索引不仅存储了关键词和文档的对应关系,还记录了关键词在文档中的具体位置。通过倒排索引,Elasticsearch 可以快速地查找关键词并确定其在文档中的位置,从而在搜索结果中自动为这些关键词添加高亮标签。



Elasticsearch 高亮显示的实现

在 Elasticsearch 中,高亮显示的配置非常简单,只需要在查询请求中添加 highlight 参数。

其语法结构如下:

GET /IndexName/_search
{"query": {"match": {"field": "text"}},"highlight": {"fields": {	// 指定要高亮的字段"field": { // 可省略下面两个参数,默认会在高亮的前后添加<em></em>标签"pre_tags": "<em>",	// 高亮的前置标签"post_tags": "</em>"	// 高亮的后置标签}}}
}

高亮显示标签

  • 预置标签: 默认情况下,Elasticsearch 使用 <em> 标签来高亮显示关键词。
  • 自定义标签: 可以通过 pre_tagspost_tags 参数来自定义高亮标签。例如,将标签更改为 <font> 标签:
{"highlight": {"fields": {"name": {"pre_tags": "<font color='red'>","post_tags": "</font>"}}}
}

示例:

GET /items/_search
{"query": {"match": {"name": "脱脂牛奶"}},"highlight": {"fields": {"name": {}}}
}
  • query: 表示查询条件,使用 match 查询来搜索商品名称中包含“脱脂牛奶”的文档。
  • highlight: 配置高亮显示。
    • fields: 指定要高亮的字段,如商品名称 name

通过这个配置,Elasticsearch 会自动在搜索结果中找到“脱脂牛奶”出现的地方,并为其加上标签。


返回结果:



注意事项

  • source 与 highlight 的区别: Elasticsearch 在返回查询结果时,会包含两个部分:
    • source: 原始文档内容,不会受到高亮标签的影响。
    • highlight: 高亮后的查询结果,包含加上标签的字段值。
  • 所以,如果需要访问高亮的结果,应该访问 highlight 部分,而不是 source 部分。



高亮显示的应用场景

高亮显示在商品搜索、文章检索、知识库查询等应用场景中非常常见,用户能够通过高亮标出关键词,更容易找到与其查询相关的信息。



总结

在 Elasticsearch 中实现高亮显示主要依赖于倒排索引和定位关键词位置的能力,通过指定需要高亮的字段和标签,Elasticsearch 可以自动为匹配的关键词加上标签。在前端的展示中,通过指定 CSS 样式来实现高亮效果,确保搜索结果更易于用户浏览。
在这里插入图片描述

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

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

相关文章

WGAN - 瓦萨斯坦生成对抗网络

1. 背景与问题 生成对抗网络&#xff08;Generative Adversarial Networks, GANs&#xff09;是由Ian Goodfellow等人于2014年提出的一种深度学习模型。它包括两个主要部分&#xff1a;生成器&#xff08;Generator&#xff09;和判别器&#xff08;Discriminator&#xff09;…

低代码系统-产品架构案例介绍(五)

接上篇&#xff0c;某搭介绍。 某搭以低代码为核心驱动&#xff0c;利用AI能力强势推动应用深度体验&#xff0c;打通钉钉对接&#xff0c;且集成外部系统。 可以看出&#xff0c;某搭在未来的规划上&#xff0c;着重在于AI 也就说明&#xff0c;低代码产品在未来的竞争上&…

嵌入式知识点总结 ARM体系与架构 专题提升(一)-硬件基础

嵌入式知识点总结 ARM体系与架构 专题提升(一)-硬件基础 目录 1.NAND FLASH 和NOR FLASH异同 ? 2.CPU,MPU,MCU,SOC,SOPC联系与差别? 3.什么是交叉编译&#xff1f; 4.为什么要交叉编译&#xff1f; 5.描述一下嵌入式基于ROM的运行方式和基于RAM的运行方式有什么区别? 1…

学习记录之原型,原型链

构造函数创建对象 Person和普通函数没有区别&#xff0c;之所以是构造函数在于它是通过new关键字调用的&#xff0c;p就是通过构造函数Person创建的实列对象 function Person(age, name) {this.age age;this.name name;}let p new Person(18, 张三);prototype prototype n…

迈向 “全能管家” 之路:机器人距离终极蜕变还需几步?

【图片来源于网络&#xff0c;侵删】 这是2024年初Figure公司展示的人形机器人Figure 01&#xff0c;他可以通过观看人类的示范视频&#xff0c;在10小时内经过训练学会煮咖啡&#xff0c;并且这个过程是完全自主没有人为干涉的&#xff01; 【图片来源于网络&#xff0c;侵删】…

海康工业相机的应用部署不是简简单单!?

作者&#xff1a;SkyXZ CSDN&#xff1a;SkyXZ&#xff5e;-CSDN博客 博客园&#xff1a;SkyXZ - 博客园 笔者使用的设备及环境&#xff1a;WSL2-Ubuntu22.04MV-CS016-10UC 不会吧&#xff1f;不会吧&#xff1f;不会还有人拿到海康工业相机还是一脸懵叭&#xff1f;不会还有人…

【自动控制原理】非线性系统 描述函数法 相平面法

写在前面&#xff08;叠甲&#xff09;&#xff1a; 非线性是控制科学中重要的一个研究方向&#xff0c;它所包含的理论远远超过自动控制原理中的内容。在本文中&#xff0c;所介绍的内容仍然在《自动控制原理》框架内&#xff0c;所以只介绍了自控原理课程中涉及的非线性问题&…

three.js实现裸眼双目平行立体视觉

three.js实现裸眼双目平行立体视觉原理&#xff1a; 利用两个相机、两个渲染器&#xff0c;同时渲染同一个场景。 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"…

N个utils(sql)

sql&#xff0c;操作数据库的语言&#xff0c;也可以叫做数据库软件的指令集吧。名字而已&#xff0c;无所谓啦。 本质上&#xff0c;sql并不是java语言内的范畴。但却是企业级开发的范畴。并且我整个文章的一篇逻辑的本质&#xff0c;层的概念&#xff0c;其中一个大的层级就…

工业网口相机:如何通过调整网口参数设置,优化图像传输和网络性能,达到最大帧率

项目场景 工业相机是常用与工业视觉领域的常用专业视觉核心部件&#xff0c;拥有多种属性&#xff0c;是机器视觉系统中的核心部件&#xff0c;具有不可替代的重要功能。 工业相机已经被广泛应用于工业生产线在线检测、智能交通,机器视觉,科研,军事科学,航天航空等众多领域 …

【数据分享】1929-2024年全球站点的逐年平均气温数据(Shp\Excel\无需转发)

气象数据是在各项研究中都经常使用的数据&#xff0c;气象指标包括气温、风速、降水、湿度等指标&#xff0c;其中又以气温指标最为常用&#xff01;说到气温数据&#xff0c;最详细的气温数据是具体到气象监测站点的气温数据&#xff01;本次我们为大家带来的就是具体到气象监…

pytest+playwright落地实战大纲

前言 很久没有更新博客&#xff0c;是因为在梳理制作Playwright测试框架实战相关的课程内容。现在课程已经完结&#xff0c;开个帖子介绍下这门课程&#xff08;硬广, o(〃&#xff3e;▽&#xff3e;〃)o&#xff09; 课程放在CSDN学习频道&#xff0c; 欢迎关注~ PyTestPl…

鸿蒙系统 将工程HarmonyOS变成OpenHarmony

DevEco Studio软件创建工程后需要修改两个地方&#xff1a; 修改第二个build-profile.json5文件 将原先内容&#xff1a; {"app": {"signingConfigs": [],"products": [{"name": "default","signingConfig": &q…

Matlab总提示内存不够用,明明小于电脑内存

目录 前言情况1&#xff08;改matlab最大内存限制&#xff09;情况2&#xff08;重启电脑&#xff09;情况3 前言 在使用matlab中&#xff0c;有时候需要占用的内存并没有超过电脑内存依旧会报错&#xff0c;提示内存不够用&#xff0c;可以尝试下面几种方法&#xff0c;总有一…

[操作系统] 进程的调度

进程切换概念 时间⽚&#xff1a;当代计算机都是分时操作系统&#xff0c;没有进程都有它合适的时间⽚(其实就是⼀个计数 器)。时间⽚到达&#xff0c;进程就被操作系统从CPU中剥离下来。 死循环是如何运行&#xff1f; 当一个进程代码为死循环&#xff0c;它并不会一直占据C…

免费为企业IT规划WSUS:Windows Server 更新服务 (WSUS) 之快速入门教程(一)

哈喽大家好&#xff0c;欢迎来到虚拟化时代君&#xff08;XNHCYL&#xff09;&#xff0c;收不到通知请将我点击星标&#xff01;“ 大家好&#xff0c;我是虚拟化时代君&#xff0c;一位潜心于互联网的技术宅男。这里每天为你分享各种你感兴趣的技术、教程、软件、资源、福利…

【2025】拥抱未来 砥砺前行

2024是怎样的一年 2024在历史画卷上是波澜壮阔的一年&#xff0c;人工智能的浪潮来临&#xff0c;涌现出无数国产大模型。 22年11月ChatGPT发布&#xff0c;它的出现如同在平静湖面上投下一颗巨石&#xff0c;激起了层层波澜&#xff0c;短短五天用户数就达到了100万&#xff0…

Java设计模式—观察者模式

观察者模式 目录 观察者模式1、什么是观察者模式&#xff1f;2、观察者模式优缺点及注意事项&#xff1f;3、观察者模式实现&#xff1f;4、手写线程安全的观察者模式&#xff1f; 1、什么是观察者模式&#xff1f; - 实例&#xff1a;现实生活中很多事物都是依赖存在的&#x…

鸿蒙开发中的骨架图:提升用户体验的关键一环

大家好&#xff0c;我是小 z&#xff0c;今天要给大家分享一个提升用户体验的超实用技巧 —— 骨架图&#x1f3af; 文章目录 一、什么是骨架图二、骨架图的作用三、鸿蒙开发中实现骨架图的方法1. 利用 opacity 奠定视觉基础2. animateTo 驱动动态变化3. 二者协同触发与展示 四…

vue+高德API搭建前端Echarts图表页面

利用vue搭建Echarts图表页面&#xff0c;在搭建Echarts图表中&#xff0c;如果搭建地理地形图需要准备一些额外的文件&#xff0c;地理json文件和js文件&#xff0c;js文件目前在网上只能找省一级的&#xff0c;json文件有对应的省市县&#xff0c;js文件和json文件对应的也是不…