【Elasticsearch】most_fields、best_fields、cross_fields 的区别与用法

most_fields、best_fields、cross_fields 的区别与用法

  • 1.核心区别概述
  • 2.详细解析与用法
    • 2.1 best_fields(最佳字段匹配)
    • 2.2 most_fields(多字段匹配)
    • 2.3 cross_fields(跨字段匹配)
  • 3.对比案例
    • 3.1 使用 best_fields 搜索
    • 3.2 使用 most_fields 搜索
    • 3.3 使用 cross_fields 搜索
  • 4.选型建议

1.核心区别概述

这三种类型都是 multi_match 查询中的策略,用于控制多个字段的匹配方式和评分计算:

类型核心思想适用场景评分方式
best_fields取最佳字段查询词集中在单个字段使用最高分字段的得分
most_fields字段民主制查询词分散在多个字段各字段得分的总和
cross_fields跨字段统一查询词需要跨字段组合匹配视为一个大字段计算

2.详细解析与用法

2.1 best_fields(最佳字段匹配)

  • 默认的多字段匹配类型。
  • 关注查询词在单个字段中的最佳匹配。
  • 使用 dis_max 查询(只取最高分字段的得分)。

典型用例

GET /products/_search
{"query": {"multi_match": {"query": "quick brown","type": "best_fields","fields": ["title^3", "content"], // title权重更高"tie_breaker": 0.3 // 其他字段得分的30%会加入总分}}
}

适用场景

  • 当查询词很可能集中在某一个字段时。
  • 例如:搜索 “iPhone”,可能在 title 字段匹配度最高。

优势

  • 突出最相关字段的匹配。
  • 避免弱相关字段拉高不相关文档的排名。

2.2 most_fields(多字段匹配)

  • 统计所有字段的匹配情况。
  • 将各字段得分相加作为最终得分。
  • 类似 bool 查询组合多个 match 查询。

典型用例

GET /products/_search
{"query": {"multi_match": {"query": "smartphone","type": "most_fields","fields": ["name", "name.pinyin", "name.standard"] // 同义词字段}}
}

适用场景

  • 相同文本被索引到不同分析方式的字段时。
  • 需要综合多个字段的匹配程度时。
  • 例如:主字段+拼音字段+同义词字段 的组合搜索。

优势

  • 能利用不同分析器的优势。
  • 对部分匹配更宽容。

2.3 cross_fields(跨字段匹配)

  • 将多个字段视为一个大字段。
  • 要求查询词必须出现在至少一个字段中。
  • 使用经典 BM25 / TF-IDF 评分。

典型用例

GET /products/_search
{"query": {"multi_match": {"query": "John Smith","type": "cross_fields","fields": ["first_name", "last_name"],"operator": "and" // 必须同时包含 John 和 Smith}}
}

适用场景

  • 人名搜索(姓和名分布在不同字段)。
  • 地址搜索(省市区街道分散在不同字段)。
  • 需要将多个字段作为一个逻辑字段处理的场景。

优势

  • 解决 “词项分散问题”(term dilution problem)。
  • 确保查询词必须出现在字段组合中。

3.对比案例

假设有以下文档:

{"title": "Smartphone X10","description": "Latest smartphone with advanced camera","tags": ["electronics", "mobile"]
}

现在需要搜索 smartphone camera

3.1 使用 best_fields 搜索

{"type": "best_fields","fields": ["title", "description"]
}

结果description 字段的匹配得分更高(包含两个词),title 字段的匹配被忽略。

3.2 使用 most_fields 搜索

{"type": "most_fields","fields": ["title", "description"]
}

结果:两个字段的得分相加,title 匹配 “smartphone”,description 匹配两个词。

3.3 使用 cross_fields 搜索

{"type": "cross_fields","fields": ["title", "description"],"operator": "and"
}

结果:要求两个词必须出现在字段组合中(description 满足),类似在虚拟字段 “title+description” 中搜索。

4.选型建议

  • 优先考虑 best_fields
    • 当有明确的主要搜索字段时。
    • 配合 tie_breaker 参数平衡其他字段影响。
  • 考虑 most_fields
    • 当有多个同义字段(如不同分析器生成的字段)。
    • 需要宽松匹配时。
  • 选择 cross_fields
    • 当数据逻辑上属于同一字段但物理上分开存储时。
    • 需要解决词项分散问题时。
  • 性能考虑
    • best_fields 通常最快(dis_max 查询简单)。
    • cross_fields 可能较慢(需要协调多个字段的统计信息)。

🚀 正确选择匹配类型可以显著提升搜索相关性和用户体验。

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

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

相关文章

力扣网C语言编程题:在数组中查找目标值位置之暴力解法

一. 简介 本文记录一下力扣网上涉及数组的问题:排序数组中查找目标值的位置。主要以C语言实现。 二. 力扣网C语言编程题:在数组中查找目标值位置 题目:在排序数组中查找元素的第一个和最后一个位置 给你一个按照非递减顺序排列的整数数组 …

OSCP - Proving Grounds - tre

主要知识点 突破边界的方法比较多样观察pspy64的检测结果 具体步骤 依旧nmap扫描开始,开放了80,8082,22端口 Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-12-16 03:39 UTC Nmap scan report for 192.168.56.84 Host is up (0.00083s latency). Not shown: 65532 c…

【Mars3d】支持的basemaps数组与layers数组的坐标系列举

问题场景: basemap 是epsg4326的。,layer 图层是 epsg 4450的。可以在一个页面中展示吗? 回复: 可以不同坐标系叠加,但layer 图层是 epsg 4450的只支持arcgis动态服务,其他情况的不支持 wmts只支持3个坐标…

【算法】509. 斐波那契数

509. 斐波那契数 简单 相关标签 premium lock icon 相关企业 斐波那契数 (通常用 F(n) 表示)形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是: F(0) 0,F(1) 1 …

FOC学习笔记(5)内嵌式电机与表贴式电机的区别

1. 引言 在现代电机设计中,永磁同步电机(Permanent Magnet Synchronous Motor, PMSM)因其高效率、高功率密度和优异的动态性能,在工业、新能源汽车、航空航天等领域得到广泛应用。根据永磁体在转子中的安装方式不同,永…

算法 按位运算

按位与(Bitwise AND)和按位异或(Bitwise XOR) 按位与(&) 按位与是对两个数的二进制表示的每一位进行逻辑与操作。 规则:两个对应位都为1时,结果位才为1,否则为0。…

python3GUI--基于PyQt5+SQLite3的网址审核系统(详细图文)

文章目录 一.前言二.相关知识1.PyQt52.sqlite3 三.效果预览1.登录2.注册3.普通用户身份权限4.管理员身份权限 三、技术讨论1.数据展示表格1. 更强的表现力和交互性(前端功能丰富)2. 数据处理效率更高(支持大…

与后端现场联调mock数据

当我们后端在现场没办法连后端本地就可以使用mock数据,模拟后端返回数据。使用工具:apifox 一、安装好以后--新建接口 举个栗子: 我想建个接口http://123.123.123.123:8080/api/login 二、 新建期望,返回固定值,否则…

C# 事件(发布者和订阅者)

发布者和订阅者 很多程序都有一个共同的需求,即当一个特定的程序事件发生时,程序的其他部分可以得到 该事件已经发生的通知。 发布者/订阅者模式(publisher/subscriber pattem)可以满足这种需求。在这种模式中,发布 …

RediSearch高性能全文搜索引擎

RediSearch 是 RedisLabs 团队开发的一个高性能全文搜索引擎,可作为一个 Redis Module 运行在 Redis 上。 Redis7:百万数据级Redis Search 超越 ElasticSearch Redis Search是基于Redis的全文搜索引擎模块(RediSearch)&#xff0c…

菜谱大全——字符串处理艺术:从文本解析到高效搜索 [特殊字符][特殊字符]

目录 前言一、现实场景二、技术映射2.1 基础刀工:String类2.2 高效剁馅:StringBuilder2.3 精准雕刻:正则表达式 三、知识点呈现3.1 String vs StringBuilder vs StringBuffer3.2 正则表达式核心语法速查3.3 字符串拼接性能陷阱 四、代码实现五…

webpack+vite前端构建工具 -答疑

webpack答疑 1 输入webpack命令,执行的是全局版本还是本地版本的webpack 当在命令行窗口输入webpack命令时,其执行优先级可通过以下步骤明确判断: 1.1 【全局安装优先机制】 执行原理:系统会按照环境变量PATH的顺序逐级查找可执…

API接口开放平台 Crabc 3.4 发布

Crabc 是一款 API 接口开发平台,企业级接口管理、SQL2API 平台。支持动态数据源、动态 SQL 和标签, 支持接入(mysql、oracle、达梦、TiDB、hive、es 和 mongodb)等 SQL 或 NoSQL 数据源,在线可视化编写 SQL 快速发布接…

PD快充协议芯片XSP04D支持全协议+支持串口通讯+支持与主板共用一个Type-C

随着Type-C接口的充电器普及,市面上的PD充电器越来越多,小家电产品可不配充电器,使用Type-C接口,然后加入一颗PD协议取电协议芯片XSP08即可让充电器/充电宝/车充等电源输出9V/12V/15V/20V电压给产品供电。 针对各种各样的不同需求…

C# 高效加载txt文件内容

在 C# 中,高效加载 TXT 文件内容可以通过多种方法实现,具体方法的选择取决于文件的大小和读取需求。以下是一些常用的方法: 1. 使用 File.ReadAllText 如果文件比较小,并且你希望一行一行地读取整个内容,可以使用 Fi…

(2)pytest执行用例的规则

1. 简介 今天主要学习一下pytest的执行用例的规则。 2. 通过help帮助查看pytest如何使用 .查看pytest命令行参数,可以用pytest -h 或pytest --help查看 3. 用例设计原则 文件名以test_*.py文件和*_test.py以test_开头的函数以Test开头的类以test_开头的方法所有的…

InnoDB数据页

导读: 我们已经知道了页是数据库存储的基本单位,知道了一条行记录的存储格式是怎样的,当数据越来越多时,那一条条行记录具体又是怎么在页中被组织起来的呢? 一、InnoDB数据页结构 二、总结 1、一条条行数据是如何在数…

世赛背景下,中职物联网应用与服务赛项实训解决方案

一、世赛背景与物联网应用赛项概述 1.1 世赛发展历程及对中职教育的影响 世界技能大赛(WorldSkills Competition,简称世赛)自1950年创立以来,已经成为全球范围内展示职业技能水平的重要赛事。截至2024年,世赛已成功举…

【攻防篇】解决:阿里云docker 容器中自动启动xmrig挖矿-- 实战

文章目录 场景一、问题二、原因三、解决方案1、控制台处理2、 [清除与防护](https://blog.csdn.net/ladymorgana/article/details/148921668?spm1001.2014.3001.5501)1. 紧急处理:停止挖矿进程2. 清理被感染的容器3. 防护措施:防止再次被入侵4. 排查入侵…

飞算智造JavaAI:智能编程革命——AI重构Java开发新范式

文章目录 引言:当传统Java开发遇上AI一、技术架构解析1.1 核心架构图1.2 关键技术栈 二、实战演示:从需求到代码的全AI辅助2.1 场景:电商优惠券系统开发2.2 代码生成实例2.3 智能调试演示 三、与传统开发模式对比测试3.1 基准测试数据3.2 典型…