elasticsearch中highlight的“假匹配”

elasticsearch中highlight的“假匹配”

一个highlight的假高亮现象:

/company_meta_info/_search?rest_total_hits_as_int=true

{"_source": {"includes": ["name","address"]},"query": {"bool": {"should": [{"match": {"address": {"query": "新疆蓝天七色建材有限公司","operator": "and"}}}]}},"highlight": {"fields": {"name": {},"address": {}}},"from": 0,"size": 10
}

返回结果:可以发现通过地址是没有匹配到任何结果

{"took": 2,"timed_out": false,"_shards": {"total": 6,"successful": 6,"skipped": 0,"failed": 0},"hits": {"total": 0,"max_score": null,"hits": []}
}

换一种方式:先设法把文档召回

{"_source": {"includes": ["name","address"]},"query": {"bool": {"should": [{"match": {"address": {"query": "新疆蓝天七色建材有限公司","operator": "and"}}},{"match": {"org_id": "Q0000D2AC1" //此处匹配目标}}]}},"highlight": {"fields": {"name": {},"address": {}}},"from": 0,"size": 10
}

返回结果:可以发现,结果并不是由于address字段命中召回的,但是highlight却有address,so 这是为什么尼

{"took": 2,"timed_out": false,"_shards": {"total": 6,"successful": 6,"skipped": 0,"failed": 0},"hits": {"total": 1,"max_score": 8.805375,"hits": [{"_index": "company_meta_info_v6","_type": "_doc","_id": "Q0000D2AC1","_score": 8.805375,"_source": {"address": "新疆五家渠市北一东街1299号","name": "新疆蓝天七色建材有限公司"},"highlight": {"address": ["<em>新疆</em>五家渠市北一东街1299号"]}}]}
}

这就需要了解elasticsearch中的高亮处理方式了。在elasticsearch中有三种高亮处理方式:highlighter, fast-vector-highlighter, postings-highlighter。默认使用的是highlighter方式。

highlighter 高亮也叫plain高亮,highlighter方式高亮是个实时分析处理高亮器。即用户在查询的时候,搜索引擎查询到了目标数据后,将需要高亮的字段数据提取到内存,再调用该字段的分析器进行处理,分析器对文本进行分析处理,分析完成后采用相似度算法计算得分最高的前n组并高亮段返回数据。

fast-vector-highlighter(fvh)高亮器利用建索引时候保存好的词项向量(term vector)来直接计算高亮段落,在高亮过程中比plain高亮方式少了实时分析过程,取而代之的是直接从磁盘中将分词结果直接读取到内存中进行计算。故要使用fvh的前置条件就是在建索引时候,需要配置存储词项向量,词向量需要包含词位置信息、词偏移量信息。

配置选项描述
no不启用term vector,默认值
yes启用term vector,但是仅仅记录分词
with_positions启用term vector, 记录分词及分词在字符串中的位置
with_offsets启用term vector, 记录分词在字符串中的起始字符位置
with_positions_offsets启用term vector, 记录分词在字符串中的位置及起始的字符位置
with_positions_payloads启用term vector, 记录分词在字符串中的位置及payloads
with_positions_offsets_payloads启用term vector, 记录分词在字符串中的位置、起始字符位置及payloads

fvh在高亮时候的逻辑如下:

1.分析高亮查询语法,提取表达式中的高亮词集合
2.从磁盘上读取该文档字段下的词向量集合
3.遍历词向量集合,提取自表达式中出现的词向量
4.根据提取到目标词向量读取词频信息,根据词频获取每个位置信息、偏移量
5.通过相似度算法获取得分较高的前n组高亮信息
6.读取字段内容(多字段用空格隔开),根据提取的词向量直接定位截取高亮字段

postings-highlighter(postings)。postings 高亮方式与fvh相似,采用词量向量的方式进行高亮,与fvh高亮不同的是postings高亮只存储了词向量的位置信息,并未存储词向量的偏移量,故中大字段存储中,postings其比fvh节省约20-30%的存储空间,速度与fvh基本相当。

so 由上述的表述我们就知道了,plain类型高亮方式,是首先召回文档,然后对文档进行高亮处理,在高亮处理的过程中并不会参考我们query中的配置条件(“operator”: “and”);所以才会出现我们上面例子中的现象。单靠address条件并不会召回目标文档;当我们用其他条件召回了目标文档时,会进行高亮处理。

我们并不能单纯的将highlight的结果当成文档的匹配原由,想要了解匹配原理还是要通过explain

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

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

相关文章

[笔记] 字符串输入 #字符输入

字符串的多组输入格式 scanf("%c", &ch)读取单个字符&#xff0c;用EOF作为结束的判断标志。 刷题记录&#xff1a;[题] 查找最大元素 #字符输入 逐个字符手动读取&#xff0c;因为题目的要求&#xff0c;要对每个字符逐个操作&#xff0c;所以就输入的时候顺便…

android一些经验记录

1.应用程序闪退&#xff0c;连画面都没有&#xff0c;先去看看程序的xml文件中的控件是不是有错误。

C++:string类!

Cstring 是C中的字符串。 字符串对象是一种特殊类型的容器&#xff0c;专门设计来操作的字符序列。 不像传统的c-strings,只是在数组中的一个字符序列&#xff0c;我们称之为字符数组&#xff0c;而C字符串对象属于一个类&#xff0c;这个类有很多内置的特点&#xff0c;在操作…

软考 系统架构设计师系列知识点之设计模式(11)

接前一篇文章&#xff1a;软考 系统架构设计师系列知识点之设计模式&#xff08;10&#xff09; 所属章节&#xff1a; 老版&#xff08;第一版&#xff09;教材 第7章. 设计模式 第2节. 设计模式实例 相关试题 10. 设计模式按照目的可划分三类&#xff0c;其中&#xff0c;…

某国产中间件企业:提升研发安全能力,助力数字化建设安全发展

​某国产中间件企业是我国中间件领导者&#xff0c;国内领先的大安全及行业信息化解决方案提供商&#xff0c;为各个行业领域近万家企业客户提供先进的中间件、信息安全及行业数字化产品、解决方案及服务支撑&#xff0c;致力于构建安全科学的数字世界&#xff0c;帮助客户实现…

c语言刷题(9周)(6~10)

输入10个不等的整数创建数组a[10]&#xff0c;在数组a中找是否存在整数t。若存在显示找到了及下标位置&#xff0c;若不存在显示error。 题干输入10个不等的整数创建数组a[10]&#xff0c;在数组a中找是否存在整数t。若存在显示找到了及下标位置&#xff0c;若不存在显示error…

进程空间管理:用户态和内核态

用户态虚拟空间里面有几类数据&#xff0c;例如代码、全局变量、堆、栈、内存映射区等。在 struct mm_struct 里面&#xff0c;有下面这些变量定义了这些区域的统计信息和位置。 unsigned long mmap_base; /* base of mmap area */ unsigned long total_vm; /* Total page…

Python算法——选择排序

选择排序&#xff08;Selection Sort&#xff09;是一种简单的排序算法&#xff0c;它的基本思想是在未排序的部分中选择最小&#xff08;或最大&#xff09;的元素&#xff0c;然后将其放在已排序部分的末尾。选择排序不同于冒泡排序&#xff0c;它不需要反复交换元素&#xf…

Android 自定义View一

1.继承已有VIew&#xff0c;改写尺寸&#xff1a;重写onMeasure SquareImageView 2.完全自定义重写onMeasure 3.自定义Layout 重写onMeasure onLayout 1.继承已有VIew&#xff0c;改写尺寸&#xff1a;重写onMeasure 流程&#xff1a; 重写onMeasure 用getmeasureedWidth …

人工智能-多层感知机

隐藏层 该模型通过单个仿射变换将我们的输入直接映射到输出&#xff0c;然后进行softmax操作。 如果我们的标签通过仿射变换后确实与我们的输入数据相关&#xff0c;那么这种方法确实足够了。 但是&#xff0c;仿射变换中的线性是一个很强的假设。 线性模型可能会出错 例如&…

【Spring】配置文件-properties和xml

文章目录 1. 前言2. properties配置文件3. xml配置文件4. 总结 1. 前言 在Spring中,配置文件有两种,properties配置文件和xml配置文件 properties配置文件&#xff0c;在Java编程中是一种常见的配置文件形式&#xff0c;文件后缀为“.properties”&#xff0c;属于文本文件。它…

Java中的23种设计模式

一、创建型模式1.单例模式 单例模式是 Java 中最简单的设计模式之一。通过单例模式&#xff0c;可以保证系统中&#xff0c;应用了单例模式的类&#xff0c;只有一个对象实例。包括五种&#xff1a;饿汉式、懒汉式、双重校验、静态内部类、枚举类。 1.1 饿汉式 特点:类加载时…

typeScript的类型等级

1.首先安装typeScript npm install typescript 2.方便学习安装一个types/node方便编译ts npm install types/node 可以直接使用命令 ts-node index.ts 准备工作完成&#xff01;&#xff01;&#xff01; 类型的等级 1&#xff1a;any unknown //顶级的类型 2: Object …

十分钟设置免费海外远程桌面 | 使用Amazon Lightsail服务的免费套餐轻松搭建远程桌面

目录 使用Amazon Lightsail服务的免费套餐轻松搭建远程桌面 1. 启动Amazon Lightsail实例 2. 配置远程桌面 3. 启动远程桌面 4. 使用远程桌面 使用Amazon Lightsail服务的免费套餐轻松搭建远程桌面 前言 ①本教程将向您介绍如何使用Amazon Lightsail服务的免费套餐轻松搭…

linux导入、导出数据库sql语句

导入数据库 1、首先建空数据库 mysql>create database abc;2、导入数据库 方法一&#xff1a; &#xff08;1&#xff09;选择数据库 mysql>use abc;&#xff08;2&#xff09;设置数据库编码 mysql>set names utf8;&#xff08;3&#xff09;导入数据&#xff0…

Vue+elementui 纯前端实现Excel导入导出功能(区分表头标题)

引入插件 import * as XLSX from "xlsx/xlsx.mjs"; import { read, utils } from xlsx/xlsx.mjs; 上传文件方法 // 上传文件状态改变时的钩子&#xff0c;添加文件、上传成功和上传失败时都会被调用async handle(ev) {//改变表格key值this.$refs.cpkTable.loading…

git pull 时每次都要输入用户名和密码的解决办法

解决办法&#xff1a; git bash进入你的项目目录&#xff0c;输入&#xff1a; git config credential.helper store

知心早安问候语,愿你享受美好的时光,幸福快乐每一天

人生万里路&#xff0c;走好每一步&#xff0c;身体是本钱&#xff0c;平安是财富&#xff0c;开心就是护身符&#xff0c;健康才是摇钱树。新的一天&#xff0c;事事顺意&#xff01; 晨起福门开&#xff0c;快乐安康在&#xff0c;愉悦心态好&#xff0c;生活充满爱&#xf…

Qt报错整理-Q_DECLARE_METATYPE

1、Q_DECLARE_METATYPE 进行数据绑定时候&#xff0c;出现这个bug错。 error: C2338: Type is not registered, please use the Q_DECLARE_METATYPE macro to make it known to Qt。 原因&#xff1a;使用了QVariant::fromValue(user)&#xff0c;QVariant对象使用前需进行类…

DeepXDE学习笔记【1】——简单ODE方程求解

DeepXDE学习笔记【1】——简单ODE方程求解 1、背景 物理信息神经网络(PINN)自从2017年被提出&#xff0c;其应用范围在近两年也被挖掘的越来越广泛&#xff0c;除了可以解决物理方面的问题&#xff0c;信号处理、工程评估等等方向也开始有所涉及&#xff0c;所谓“物理数据双…