当前位置: 首页 > news >正文

深度分析 es multi_match 中most_fields、best_fields、cross_fields区别

文章目录

      • 1. `multi_match` 查询的类型
        • 1.1 `best_fields`(默认)
        • 1.2 `most_fields`
        • 1.3 `cross_fields`
      • 2. 不同类型的示例
        • 查询示例数据:
      • 3. 示例 1: 使用 `best_fields`
        • 查询:
        • 说明:
      • 4. 示例 2: 使用 `most_fields`
        • 查询:
        • 说明:
      • 5. 示例 3: 使用 `cross_fields`
        • 查询:
        • 说明:
      • 6. 返回的结果对比
      • 7. 总结对比
      • 8. 总结

Elasticsearch 中,multi_match 查询是用来在多个字段中查找匹配的文本。它有不同的 type(类型),例如 most_fieldsbest_fieldscross_fields,这些类型在多字段查询时的匹配策略不同。了解这些类型的区别有助于在不同的场景下做出正确的查询选择。

1. multi_match 查询的类型

1.1 best_fields(默认)

best_fields默认类型。它在多个字段上查找匹配项,并返回与单个字段最匹配的结果。也就是说,ES 会计算每个字段的相关性,然后返回最佳的字段匹配结果。

  • 适用场景:当你希望查询中的单个字段更重要时,best_fields 适合。
  • 匹配逻辑:多个字段参与查询,但只会选取最好的字段结果。
1.2 most_fields

most_fields 会把多个字段的匹配结果合并到一起,计算最匹配的字段的相关性。每个字段会被视为一个独立的匹配源,并且它们的分数会累加在一起。

  • 适用场景:当你希望多个字段的匹配对结果有较大影响时,most_fields 适合。
  • 匹配逻辑:多个字段的匹配结果累加,最终的得分是字段得分的总和。
1.3 cross_fields

cross_fields 适用于对多个字段中的数据进行组合查询。它将多个字段合并在一起,类似于一个字段查询。这对于多字段中包含相同概念的情况(例如多个单词分布在不同的字段)尤其有用。

  • 适用场景:当你希望将多个字段视为同一个字段的组合时,cross_fields 适合。
  • 匹配逻辑:多个字段被视为一个大的字段进行匹配。

2. 不同类型的示例

假设你有一个包含以下字段的 products 索引:

{"product_name": "Wireless Mouse","description": "A wireless mouse with ergonomic design","category": "Electronics"
}

你想要对这几个字段进行查询,可以使用 multi_match 来搜索多个字段。

查询示例数据:
POST /products/_bulk
{ "index": { "_id": 1 } }
{ "product_name": "Wireless Mouse", "description": "A wireless mouse with ergonomic design", "category": "Electronics" }
{ "index": { "_id": 2 } }
{ "product_name": "Wired Keyboard", "description": "A keyboard with ergonomic design", "category": "Electronics" }
{ "index": { "_id": 3 } }
{ "product_name": "Wireless Keyboard", "description": "Wireless keyboard for gaming", "category": "Electronics" }

3. 示例 1: 使用 best_fields

best_fields 是默认类型,表示从多个字段中选取相关性最强的字段。

查询:
POST /products/_search
{"query": {"multi_match": {"query": "wireless mouse","fields": ["product_name", "description"],"type": "best_fields"}},"explain": true
}
说明:

在这里插入图片描述

  • 这个查询会在 product_namedescription 字段上查找匹配,并根据相关性返回最佳的字段匹配结果。
  • 如果 product_name 字段匹配度最高,ES 会选择 product_name 字段作为最终匹配字段。

4. 示例 2: 使用 most_fields

most_fields 会将多个字段的相关性累加。

查询:
POST /products/_search
{"query": {"multi_match": {"query": "wireless mouse","fields": ["product_name", "description"],"type": "most_fields"}},"explain": true
}
说明:

在这里插入图片描述

  • 这个查询会把 product_namedescription 两个字段的匹配结果合并,计算它们的总相关性,并返回结果。
  • 比如,product_namedescription 都与查询的 wireless mouse 匹配时,它们的相关性分数会被加在一起。

5. 示例 3: 使用 cross_fields

cross_fields 用于处理多个字段中包含的同一概念时,可以把它们当作一个大的字段进行匹配。

查询:
POST /products/_search
{"query": {"multi_match": {"query": "wireless mouse","fields": ["product_name", "description"],"type": "cross_fields"}},"explain": true
}
说明:

在这里插入图片描述

  • 这个查询会把 product_namedescription 视为一个联合字段,来匹配查询词 wireless mouse
  • 即使 wireless mouse 分布在多个字段中(例如,product_name 包含 wirelessdescription 包含 mouse),cross_fields 会将它们合并为一个整体进行匹配。

6. 返回的结果对比

假设你使用了相同的查询词 wireless mouse,结果的排序可能会有所不同,具体取决于查询使用的类型。

  1. best_fields:选择一个字段(最匹配的字段),然后返回与该字段最匹配的文档。
  2. most_fields:计算多个字段的得分,并返回得分最高的文档。
  3. cross_fields:将多个字段视为一个字段进行匹配,从而查找多个字段中的联合匹配。

7. 总结对比

类型描述适用场景
best_fields在多个字段上查找匹配,只选择相关性最强的字段作为最终匹配结果(默认)。如果只关注单个最相关字段,适用于精确匹配。
most_fields将多个字段的相关性得分累加,最终返回得分最高的结果。如果多个字段的匹配结果对最终排序有较大影响。
cross_fields将多个字段合并为一个整体进行查询,适用于查询词分布在不同字段中的情况。如果多个字段包含查询的不同部分,且它们属于相同的概念。

8. 总结

  • best_fields 适用于你只关心最相关的字段结果时,通常用于精确匹配查询。
  • most_fields 适用于你希望多个字段的匹配都能影响查询结果时,适合宽松匹配。
  • cross_fields 适用于你希望将多个字段视为一个字段的组合时,尤其是在查询词分布在不同字段中时。

相关文章:

深度分析 es multi_match 中most_fields、best_fields、cross_fields区别

文章目录 1. multi_match 查询的类型1.1 best_fields(默认)1.2 most_fields1.3 cross_fields 2. 不同类型的示例查询示例数据: 3. 示例 1: 使用 best_fields查询:说明: 4. 示例 2: 使用 most_fields查询:说…...

中职计算机网络技术理实一体化实训室建设方案

构建理实一体化教学模式对于改善中等职业学校计算机网络技术课程的教学现状、提升教学质量和效率具有重要意义。在中职教育不断深化改革的背景下,积极推进理实一体化教学模式的发展,不仅能够提高计算机网络技术课程的教学水平,满足教育改革的…...

Java技术专家视角解读:SQL优化与批处理在大数据处理中的应用及原理

引言 在大厂架构中,提升系统性能和稳定性是技术团队的首要任务。SQL优化与批处理作为两大关键技术手段,对于处理大规模数据和高并发请求具有重要意义。本文将从Java技术专家的视角出发,深入探讨SQL优化与批处理在大数据处理中的应用及原理&a…...

数据结构(Java版)第六期:LinkedList与链表(一)

目录 一、链表 1.1. 链表的概念及结构 1.2. 链表的实现 专栏:数据结构(Java版) 个人主页:手握风云 一、链表 1.1. 链表的概念及结构 链表是⼀种物理存储结构上⾮连续存储结构,数据元素的逻辑顺序是通过链表中的引⽤链接次序实现的。与火车…...

云边端一体化架构

云边端一体化架构是一种将云计算、边缘计算和终端设备相结合的分布式计算模型。该架构旨在通过优化资源分配和数据处理流程,提供更高效、更低延迟的服务体验。 下面是对这个架构的简要说明: 01云计算(Cloud Computing) — 作为中心…...

人工智能之基于阿里云进行人脸特征检测部署

人工智能之基于阿里云进行人脸特征检测部署 需求描述 基于阿里云搭建真人人脸68个关键点检测模型,模型名称:Damo_XR_Lab/cv_human_68-facial-landmark-detection使用上述模型进行人脸关键点识别,模型地址 业务实现 阿里云配置 阿里云配置…...

基于高云GW5AT-15 FPGA的SLVS-EC桥MIPI设计方案分享

作者:Hello,Panda 一、设计需求 设计一个4Lanes SLVS-EC桥接到2组4lanes MIPI DPHY接口的电路模块: (1)CMOS芯片:IMX537-AAMJ-C,输出4lanes SLVS-EC 4.752Gbps Lane速率; (2&…...

MPLS小实验:利用LDP动态建立LSP

正文共:1234 字 19 图,预估阅读时间:2 分钟 通过上个实验(MPLS小实验:静态建立LSP),我们了解到静态LSP不依靠标签分发协议,而是在报文经过的每一跳设备上(包括Ingress、T…...

C++ 面向对象编程

面向对象编程(Object-Oriented Programming, OOP)是C语言的一个重要特性,它允许开发者以更直观和模块化的方式来设计和构建程序。OOP的四个主要原则是:封装(Encapsulation)、继承(Inheritance&a…...

我的Serverless实战——引领云计算的下一个十年,附答案

(Serverless模式下,按照实际消耗资源及使用存储进行计费) 4.更少的代码,更快的交付速度。 (Serverless提供成熟的代码构建发布、版本切换等特性,交付速度更快) Serverless由开发者实现的服务端逻…...

有哪些其他方法可以实现数据一致性验证?

数据库约束 主键约束: 主键是表中用于唯一标识每条记录的一列或一组列。例如,在一个“用户表”中,用户ID可以作为主键。当插入或更新数据时,数据库会自动检查主键值是否唯一。如果试图插入一个已存在主键值的记录,数据…...

vue 基础学习

一、ref 和reactive 区别 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title> </head> <body><div id"app"><h1>{{Web.title}}</h1><h1&…...

HarmonyOS NEXT 实战之元服务:静态案例效果---查看国际航班服务

背景&#xff1a; 前几篇学习了元服务&#xff0c;后面几期就让我们开发简单的元服务吧&#xff0c;里面丰富的内容大家自己加&#xff0c;本期案例 仅供参考 先上本期效果图 &#xff0c;里面图片自行替换 效果图1完整代码案例如下&#xff1a; Index代码 import { authen…...

PetaLinux 内核输出信息的获取方式

串口终端: 默认输出方式。 曾尝试过将串口终端的输出重映射到伪终端&#xff0c;失败了。 伪终端: dmesg命令 dmesg是Linux系统重查看内核日志的使用工具&#xff0c;允许查看系统内核的输出消息&#xff0c;包括引导信息&#xff0c;硬件检测&#xff0c;设备驱动和系统错…...

Android使用辅助服务AccessibilityService实现自动化任务

Android 辅助服务&#xff08;AccessibilityService&#xff09;旨在帮助具有视觉、身体或年龄相关限制的用户更轻松地使用 Android 设备和应用。通过辅助服务&#xff0c;可以将一些人工操作自动化&#xff0c;从而解放用户的双手。 因此我们可以使用它来实现一些自动化任务&a…...

工业大数据分析算法实战-day15

文章目录 day15特定数据类型的算法工业分析中的数据预处理工况划分数据缺失时间数据不连续强噪声大惯性系统趋势项消除 day15 今天是第15天&#xff0c;昨日是针对最优化算法、规则推理算法、系统辨识算法进行了阐述&#xff0c;今日主要是针对其他算法中的特定数据类型的算法…...

C语言实现顺序表详解

文章目录 [TOC] 1.前言&#x1f64b;&#x1f3fc;‍♂️2.顺序表&#x1f9e3;2.1 顺序表概念&#x1f9e3;2.2 顺序表特点&#x1f9e3;2.2 顺序表作用&#x1f9e3; 3.顺序表基操&#x1f9e4;3.1 结构体初始化&#x1f389;3.2 顺序表初始化&#x1f389;3.3 顺序表创建&am…...

【ES6复习笔记】对象方法扩展(17)

对象方法扩展 在 JavaScript 中&#xff0c;对象是属性和方法的集合。除了内置的方法&#xff0c;我们还可以通过扩展对象的原型来添加新的方法。本教程将介绍如何使用 Object.is、Object.assign 和 Object.setPrototypeOf 方法来扩展对象。 1. Object.is 判断两个值是否完全…...

【视觉惯性SLAM:相机成像模型】

相机成像模型介绍 相机成像模型是计算机视觉和图像处理中的核心内容&#xff0c;它描述了真实三维世界如何通过相机映射到二维图像平面。相机成像模型通常包括针孔相机的基本成像原理、数学模型&#xff0c;以及在实际应用中如何处理相机的各种畸变现象。 一、针孔相机成像原…...

学习笔记(C#基础书籍)-- C#基础篇

&#xff08;12.24&#xff09; C#介绍&#xff1a;《第一章》 特点&#xff1a;语法简洁&#xff0c;面向对象&#xff0c;支持绝大部分的web标准&#xff0c;强大的安全机制&#xff08;垃圾回收器&#xff09;&#xff0c;兼容性好&#xff08;遵循.NET的公共语言规范【CL…...

【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密

在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...

如何将联系人从 iPhone 转移到 Android

从 iPhone 换到 Android 手机时&#xff0c;你可能需要保留重要的数据&#xff0c;例如通讯录。好在&#xff0c;将通讯录从 iPhone 转移到 Android 手机非常简单&#xff0c;你可以从本文中学习 6 种可靠的方法&#xff0c;确保随时保持连接&#xff0c;不错过任何信息。 第 1…...

CRMEB 框架中 PHP 上传扩展开发:涵盖本地上传及阿里云 OSS、腾讯云 COS、七牛云

目前已有本地上传、阿里云OSS上传、腾讯云COS上传、七牛云上传扩展 扩展入口文件 文件目录 crmeb\services\upload\Upload.php namespace crmeb\services\upload;use crmeb\basic\BaseManager; use think\facade\Config;/*** Class Upload* package crmeb\services\upload* …...

Unit 1 深度强化学习简介

Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库&#xff0c;例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体&#xff0c;比如 SnowballFight、Huggy the Do…...

SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)

上一章用到了V2 的概念&#xff0c;其实 Fiori当中还有 V4&#xff0c;咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务)&#xff0c;代理中间件&#xff08;ui5-middleware-simpleproxy&#xff09;-CSDN博客…...

GruntJS-前端自动化任务运行器从入门到实战

Grunt 完全指南&#xff1a;从入门到实战 一、Grunt 是什么&#xff1f; Grunt是一个基于 Node.js 的前端自动化任务运行器&#xff0c;主要用于自动化执行项目开发中重复性高的任务&#xff0c;例如文件压缩、代码编译、语法检查、单元测试、文件合并等。通过配置简洁的任务…...

FFmpeg:Windows系统小白安装及其使用

一、安装 1.访问官网 Download FFmpeg 2.点击版本目录 3.选择版本点击安装 注意这里选择的是【release buids】&#xff0c;注意左上角标题 例如我安装在目录 F:\FFmpeg 4.解压 5.添加环境变量 把你解压后的bin目录&#xff08;即exe所在文件夹&#xff09;加入系统变量…...

android13 app的触摸问题定位分析流程

一、知识点 一般来说,触摸问题都是app层面出问题,我们可以在ViewRootImpl.java添加log的方式定位;如果是touchableRegion的计算问题,就会相对比较麻烦了,需要通过adb shell dumpsys input > input.log指令,且通过打印堆栈的方式,逐步定位问题,并找到修改方案。 问题…...

前端中slice和splic的区别

1. slice slice 用于从数组中提取一部分元素&#xff0c;返回一个新的数组。 特点&#xff1a; 不修改原数组&#xff1a;slice 不会改变原数组&#xff0c;而是返回一个新的数组。提取数组的部分&#xff1a;slice 会根据指定的开始索引和结束索引提取数组的一部分。不包含…...

自然语言处理——文本分类

文本分类 传统机器学习方法文本表示向量空间模型 特征选择文档频率互信息信息增益&#xff08;IG&#xff09; 分类器设计贝叶斯理论&#xff1a;线性判别函数 文本分类性能评估P-R曲线ROC曲线 将文本文档或句子分类为预定义的类或类别&#xff0c; 有单标签多类别文本分类和多…...