elasticsearch高亮之Highlight原理

这篇具有很好参考价值的文章主要介绍了elasticsearch高亮之Highlight原理。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、highlight简介

highlight是提升用户体验的重要手段,搜索引擎通过高亮突出命中关键字等方式,方便用户通过关键字周围的信息快速的确认是否是自己希望的结果;

highlight功能通常包含以下三个主要的处理过程
1.将字段文本拆分为小的片段;
2.找出最相关的片段;
3.高亮查询关键字;

二、elasticsearch的highlight功能

elasticsearch提供了专门的高亮请求参数highlight,返回的记过中也会包含对应的高亮信息;

在查询语句中,我们要求对text字段进行高亮处理;

GET /twitter/_search
{
  "query": {
    "match": {
      "text": "Another"
    }
  },
  "highlight": {
    "fields": {
      "text": {}
    }
  }
}

elasticsearch默认使用em对命中关键字进行包裹处理;

{
  "took" : 1,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : 1,
    "max_score" : 0.6931472,
    "hits" : [
      {
        "_index" : "twitter",
        "_type" : "_doc",
        "_id" : "2",
        "_score" : 0.6931472,
        "_source" : {
          "fullname" : "Jane Doe",
          "text" : "Another twitter test ..."
        },
        "highlight" : {
          "text" : [
            "<em>Another</em> twitter test ..."
          ]
        }
      }
    ]
  }
}

高亮处理需要使用原始的字段值文本,所以elasticsearch需要保存字段的值,我们可以在字段的mapping中设置store为true,否则只能从_source字段中load对应字段值;

三、elasticsearch提供的三种highlighter

elasticsearch提供了以下三种highlighter

Unified highlighter

这个unified highlighter是elasticsearch的默认highlighter,其使用的是Lucene Unified Highlighter,它会将文本分割为句子片段,然后使用BM25算法计算每个句子片段的相似性得分;改highlighter支持phrase、fuzzy、prefix等查询的高亮处理;

Plain highlighter

这个plain Highlighter使用的是标准的lucene Highlighter,其通过关键字的重要性及关键字的位置信息,尝试尽量的体现查询的匹配逻辑;

为了更加准确的体现查询的逻辑,Plain Highlighter需要针对具体的查询和命中文档的每个字段进行实时的计算,其会在内存中创建一个小型的index,然后通过查询计划重新执行一遍查询,从而获得高亮需要使用底层的匹配信息,所以其比较适合小型的字段;

Fast vector highlighter

这个fvh Highlighter使用的是Lucene Fast Vector Highlighter,其基于term_vector的数据结构,需要在mapping中将相应的字段设置为with_positions_offsets;其比较适合对大文本字段进行高亮处理;

四、Highlighter的高亮处理过程

Highlighter的主要工作就是通过传入的查询和命中的文档,找到能够最好反应匹配相关性的高亮片段;其主要需要完成以下三个工作;

1.将文本查分为小的高亮片段
本阶段主要将字段值文本拆分为小的高亮片段,三种Highlighter的处理过程如下

Plain Highlighter首先使用字段对应的analyzer对文本进行分词处理,然后通过得到的每个分词的起止字符位置,依次截取fragment_size的文本段;由于根据固定的片段长度拆分,得到的片段效果往往很不理想;

Unified和fvh Highlighter都通过Java的BreakIterator进行拆分高亮片段,配合fragment_size可以得到比较完整的句子;

2.找到最相关的高亮片段;

本阶段主要通过实际命中记录的查询关键字,对得到的高亮片段进行打分,从而找到跟查询最相关的高亮片段;

要计算高亮片段的匹配情况,有两种主要的方式

  1. 高亮处理的时候实时计算匹配情况,这样就需要针对每个高亮片段创建临时索引,并执行查询语句来获取匹配信息;
  2. index的时候进行相关分词起止字符的统计信息处理和保存;
  • postings list,在字段mapping的时候,可以通过index_options来控制记录到倒排索引中的分词统计信息,通过设置offsets可以保存记录分词的起止信息;
  • term vector,elasticsearch提供的term_vector也记录了分词过程中产生的分词的起止信息,也是在字段mapping的时候进行设置,需要设置为with_positions_offsets;

三种Highlighter的处理过程如下

Plain Highlighter首先会利用高亮片段生成的分词在内存中创建一个index,并通过lucene查询计划执行原始的查询,然后通过命中信息获得匹配的分词,通过计算高亮片段的包含的不同查询分词的数量计算相关性得分;这里直接使用查询分词的boost(默认值)进行计算;

fvh Highlighter直接利用index的时候创建的term vector来得到高亮片段匹配的查询分词,其对高亮片段的评分算法跟Plain Highlighter类似,只不过这里会将命中的所有查询分词(包括重复的查询分词)计算在内;

unified Highlighter会尝试优先使用term vectors,index中的postings list,否则只能跟plain Highlighter相同的方式进行实时计算;其使用BM25算法计算高亮片段的相似度;

3.Highlight高亮片段;

本阶段主要进行输出前的编码和格式化,最后使用pre-tags、post-tags来包裹高亮片段中的查询关键字;文章来源地址https://www.toymoban.com/news/detail-426521.html

到了这里,关于elasticsearch高亮之Highlight原理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Unity 基于URP使用Highlight Plus实现物体高亮

    内容将会持续更新,有错误的地方欢迎指正,谢谢!   Unity 基于URP使用Highlight Plus实现物体高亮       TechX 坚持将创新的科技带给世界! 拥有更好的学习体验 —— 不断努力,不断进步,不断探索 TechX —— 心探索、心进取! 助力快速实现 Highlight Plus 基于URP的物体高亮 为初学

    2024年02月05日
    浏览(38)
  • Vue3 代码块高亮显示并可使用富文本编辑器编辑(highlight.js + wangEditor)

    在Vue项目中实现以下功能:   功能1. 在页面中显示代码,并将其中的高亮显示。   功能2. 允许对代码块进行编辑,编辑时代码也高亮显示。   功能3. 可在编辑器中添加多个代码块,动态渲染代码高亮。   Step1: 安装所需插件(本文使用npm安装,若需

    2023年04月21日
    浏览(48)
  • 工具-Obsidian生产力工具,安装第三方插件(GitHub)教程,以安装Syntax Highlight(代码高亮)为例

    在GitHub的搜索框中,直接搜索obsidian +插件名,obsidian+Syntax Highlight 点进页面 一定要选择release版本的! 只需要下载css json js 文件,点击直接下载 个人习惯,每个插件,新建一个文件夹,命名好名字,放置路径为你的obsidian 工作区 的.obsidian 文件 进入到plugins文件中 新建立文件

    2023年04月22日
    浏览(52)
  • elasticsearch报错:exceeds the [index.highlight.max_analyzed_offset] limit [1000000]

    The length [27277624] of field [content] in doc[2]/index[1234567890abcdefg] exceeds the [index.highlight.max_analyzed_offset] limit [1000000]. To avoid this error, set the query parameter [max_analyzed_offset] to a value less than index setting [1000000] and this will tolerate long field values by truncating them. ********************************************

    2023年04月25日
    浏览(43)
  • 织梦DedeCMS [field:highlight/]标签详解(小结)

    我们在制作Tag标签模板时会遇到[field:highlight/]标签 这是标签随机样式 v5.7版官方只放出了2个样式,现在我们可以改为任意个样式 第一步:首选找到    templetsdefaultstylepage.css  里面找到 905行  .tagc1 在后面加上你自己的样式 如:.tagc2 .tagc3 .tagc4 ……等样式/(注意要连续递

    2024年02月02日
    浏览(41)
  • Highlight Plus 8.0.unitypackage使用说明

    Highlight Plus目前测试支持3D内置渲染管线、URP渲染管线,支持PC端、WebGL模型高亮(HDRP、移动端未测试) 1、3D内置渲染管线使用说明: 1.1、导入Highlight Plus 8.0.unitypackage包,打开HighlightPlusBundle--》Builtin--》HighlightPlus_Builtin_Pipeline,选择全部安装,安装完成后会有个HighlightPlus文件

    2024年02月04日
    浏览(33)
  • logstack 日志技术栈-04-opensource 开源工具 Syslog-ng+Highlight.io

    Syslog-ng 是一个开源的日志管理解决方案,主要用于收集和处理日志数据。它可以从多种源收集日志,包括系统日志、网络设备日志和第三方应用日志。 然后将日志解析、分类、重写和关联到统一格式中,然后将其存储或安全地传输到不同的系统(如 Apache Kafka 或 Elasticsearch)

    2024年01月21日
    浏览(55)
  • [CVPR-23-Highlight] Magic3D: High-Resolution Text-to-3D Content Creation

    目录 Abstract Background: DreamFusion High-Resolution 3D Generation Coarse-to-fine Diffusion Priors Scene Models Coarse-to-fine Optimization NeRF optimization Mesh optimization Experiments Controllable 3D Generation Personalized text-to-3D Prompt-based editing through fine-tuning DreamFusion是目前基于文本的3D生成任务的主流方法,但它有两

    2024年02月13日
    浏览(47)
  • Crayon Syntax Highlighter 强大的WP代码高亮插件安装方法

    无意中发现一款功能强大的Wordpress代码高亮插件 – Crayon Syntax Highlighter,我认为可以算是目前样式最多、易用性最高、功能最强的 WP 代码高亮插件了,程序员必备插件。 效果图: WordPress代码高亮插件(Crayon Syntax Highlighter) v2.7.2 类型: php其它 大小: 1.8MB 语言: 英文软件 时间

    2023年04月16日
    浏览(46)
  • Crayon Syntax Highlighter代码高亮插件与fancybox图片暗箱冲突的解决方法

    其实,这是一个历史遗留问题,在最开始建站的时候就已经出现了,在知更鸟主题和Crayon Syntax Highlighter这个插件之间,我最终选择了前者。 在知更鸟主题环境下启用Crayon Syntax Highlighter插件,会出现如下冲突情况: ①、图片暗箱失效 ②、下载暗箱失效 ③、公告不能滚动 刚接

    2023年04月16日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包