Elasticsearch:Combined fields 查询
有时一个匹配项可以覆盖多个文本字段。 在这种情况下,你可以使用 combined_fields 查询来搜索多个文本字段,就好像它们的值实际上已被索引到一个组合字段中一样。 除此之外,combined_fields 的主要好处是强大且易于理解的评分算法。这种做法也有类似于 copy_to 的处理方法。
combined_fields 查询属于全文查询组,它允许你搜索已分析的文本字段(例如,错误消息)。
当字段映射中没有指定 search_analyzer 时,分析器将默认为索引时应用于该字段的分析器,并使用该分析器来处理查询字符串。 如果在字段映射中指定了 search_analyzer,则此分析器将是用于处理查询字符串的分析器。
分析器只是一个由三个更小的组件构建而成的组件:字符过滤器、标记器和标记过滤器,无论是内置的还是自定义的。 这些构建块被内置的分析器预先打包到各种语言和各种文本的分析器中。 Elasticsearch 还公开了各个构建块,允许将它们合并以创建新的自定义分析器。 你可以在此处阅读有关分析器的更多信息。
combined fields 查询支持搜索多个文本字段,就好像它们的内容已被索引到一个组合字段中一样。 该查询采用把输入字符串当做以 term 为中心的输入:首先它将查询字符串分析为单独的 term,然后在任何字段中查找每个词。 当匹配可能跨越多个文本字段(例如文章的 title、abstract 和 body)时,此查询特别有用。比如我们写入如下的一个文档:
PUT combined_index/_doc/1
{"title": "Elasticsearch database is very useful","abstract": "This is a very popular system nowadays","body": "Elasticsearch is today one of the most popular database systems available today. This Elasticsearch tutorial provides new users with the prerequisite knowledge and tools to start using Elasticsearch. It includes installation instructions, and initial indexing and data handling instructions."
}
我们可以使用如下的搜索来针对 tille, abstract 及 body 同时进行查询:
GET combined_index/_search?filter_path=**.hits
{"query": {"combined_fields": {"query": "database systems","fields": ["title", "abstract", "body"],"operator": "and"}}
}
上面命令搜索返回的结果为:
{"hits": {"hits": [{"_index": "combined_index","_id": "1","_score": 0.6877647,"_ignored": ["body.keyword"],"_source": {"title": "Elasticsearch database is very useful","abstract": "This is a very popular system nowadays","body": "Elasticsearch is today one of the most popular database systems available today. This Elasticsearch tutorial provides new users with the prerequisite knowledge and tools to start using Elasticsearch. It includes installation instructions, and initial indexing and data handling instructions."}}]}
}
乍一看,是不是有点觉得像 mulit-match 查询的样子啊?这在我们下面来进行比较。
combined_fields 查询采用基于概率相关性框架:BM25 及以后中描述的简单 BM25F 公式的原则性评分方法。 在对匹配项进行评分时,查询会跨字段组合术语和集合统计信息来对每个匹配项进行评分,就好像指定字段已被索引到单个组合字段中一样。 这个得分是最好的尝试; combined_fields 做了一些近似,分数不会完全服从 BM25F 模型。
警告:字段数量限制。默认情况下,查询可以包含的子句数量是有限制的。 此限制由 indices.query.bool.max_clause_count 设置定义,默认为 4096。对于combined fileds 查询,子句数计算为字段数乘以术语数。
这个查询有什么用?
combined_fields 查询使你能够搜索多个文本字段,就好像它们的索引值已被索引到一个组合字段中一样。 combined_fields 查询在匹配可能涵盖多个文本字段时很方便。
combined_fields 查询通过采用以 term 为中心的查询视图来工作。 它将查询字符串分析为单个术语,然后在任何字段中搜索每个术语。 可以使用此查询代替跨字段 multi_match 查询。 它提供了更直接的行为和更强大的评分系统。 combined_fields 查询仅适用于具有完全相同的搜索分析器的字段,而 multi_match 查询不关心字段是否具有相同的搜索分析器。
字段分数加权
字段分数加权是 combined fields 模型而定的。 例如,如果标题 title 的提升为 2,则计算分数时就好像 title 中的每个术语在合成组合字段中出现了两次一样。
GET /_search
{"query": {"combined_fields" : {"query" : "distributed consensus","fields" : [ "title^2", "body" ] }}
}
如上所示,当我们想对 title 字段进行加权时,我们可以使用 ^ 符号来进行表述。
注意:combined_fields 查询要求字段提升大于或等于 1.0。 字段增强允许是浮点数,比如 2.2 等。
combined_fields 的参数
fields
(必需,字符串数组)要搜索的字段列表。 允许字段通配符模式。 仅支持文本字段,并且它们必须都具有相同的搜索分析器。
query
(必需,字符串)要在提供的 <fields> 中搜索的文本。
combined_fields 查询在执行搜索之前分析提供的文本。
auto_generate_synonyms_phrase_query
(可选,布尔值)如果为真,则会自动为 multi-term 同义词创建 match phrase 查询。默认为 true。
有关系的例子,请参看 Use synonyms with match query。
Operator
(可选,字符串)布尔逻辑,用于解释查询值中的文本。 有效值为:
or(默认)
例如,database systems 的查询值被解释为 database OR systems
and
例如,database systems 的查询值被解释为 database AND systems
minimum_should_match
(可选,字符串)要返回的文档必须匹配的最小子句数。 有关有效值和更多信息,请参阅 minimum_should_match 参数。
zero_terms_query
(可选,字符串)指示如果分析器删除所有分词时是否不返回任何文档,例如在使用 stop 过滤器时。 有效值为:
none(默认)
如果分析器删除所有分词,则不会返回任何文档。
all
返回所有文档,类似于 match_all 查询。
有关示例,请参见 Zero terms query 。
和 multi-match 查询比较
combined_fields 查询提供了一种跨多个文本字段进行匹配和评分的原则性方法。 为了支持这一点,它要求所有字段都具有相同的搜索分析器。
如你想要一个处理不同类型字段(如 keyword 或 numbers)的查询,那么 multi_match 查询可能更合适。 它支持文本和非文本字段,并接受不共享同一分析器的文本字段。
主要的 multi_match 模式 best_fields 和 most_fields 采用以字段为中心的查询视图。 相比之下,combined_fields 是以 term 为中心的:operator 和 minimum_should_match 应用于每个 term,而不是每个字段。 具体来说,像这样的查询:
GET /_search
{"query": {"combined_fields" : {"query": "database systems","fields": [ "title", "abstract"],"operator": "and"}}
}
被执行为:
+(combined("database", fields:["title" "abstract"]))
+(combined("systems", fields:["title", "abstract"]))
换句话说,每个术语必须出现在至少一个字段中才能匹配文档。
cross_fields multi_match 模式也采用以术语为中心的方法,并为每个术语应用 operator 和 minimum_should_match。 combined_fields 相对于 cross_fields 的主要优势是其基于 BM25F 算法的强大且可解释的评分方法。
注意:Custom similarities
combined_fields 查询目前只支持 BM25 相似度,这是默认的,除非配置了 Custom similarities。 Per-field similarities 也是不允许的。 在任何一种情况下使用 combined_fields 都会导致错误。
相关文章:
Elasticsearch:Combined fields 查询
有时一个匹配项可以覆盖多个文本字段。 在这种情况下,你可以使用 combined_fields 查询来搜索多个文本字段,就好像它们的值实际上已被索引到一个组合字段中一样。 除此之外,combined_fields 的主要好处是强大且易于理解的评分算法。这种做法也…...
uart 子系统
串口硬件储备知识: uart 在Linux 应用层的体现及使用 uart 就是串口,它也是属于字符设备中的一种,众所周知 字符设备都会在/dev/ 目录下创建节点,串口所创建的节点名都是以tty* 为开头,例如下面这些节点:…...
SpringBoot 整合EasyExcel详解
一、概述 Java解析、生成Excel比较有名的框架有Apache poi、jxl。但他们都存在一个严重的问题就是非常的耗内存,poi有一套SAX模式的API可以一定程度的解决一些内存溢出的问题,但POI还是有一些缺陷,比如07版Excel解压缩以及解压后存储都是在内…...
VScode+cuda编程:常见环境问题
VScodecuda:常见环境配置问题1、VScode终端问题(PS)2、编译问题(CUDA版本过低)3、nvcc编译问题(arch架构)1、VScode终端问题(PS) 问题描述: 在VScode下打开终端执行nvcc指令,发现执行不了,但是在外部终端powershell和cmd都可以。…...
简单实用的内网穿透实现教程
内网穿透,字面理解就是网络地址穿透,是一种比较常用的将内网地址转换成公网地址的方式。通过内网穿透,可以将本地内网局域网提供给外网公网上访问,在外网也能连接访问内网主机和应用,当用户有日常远程和异地外网访问的…...
makefile案例学习
makefile案例学习 很多时候, 我们在git clone完一个project之后,就会让我们使用make命令进行项目的构建。这个make命令的背后就是按照了Makefile文件定义的格式去完成项目构建。 因此Makefile的作用就是帮助程序员进行项目的构建,它按照项目…...
MySQL性能优化六 事物隔离级别与锁机制
概述 我们的数据库一般都会并发执行多个事务,多个事务可能会并发的对相同的一批数据进行增删改查操作,可能就会导致我们说的脏写、脏读、不可重复读、幻读这些问题。 这些问题的本质都是数据库的多事务并发问题,为了解决多事务并发问题&#…...
四数之和-力扣18-java排序+双指针
一、题目描述给你一个由 n 个整数组成的数组 nums ,和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]] (若两个四元组元素一一对应,则认为两个四元组重复):…...
操作系统开发:BIOS/MBR基础与调试
这里在实验之前需要下载 Bochs-win32-2.6.11 作者使用的是Linux版本的,在Linux写代码不太舒服,所以最好在Windows上做实验,下载好虚拟机以后还需要下载Nasm汇编器,以及GCC编译器,为了能够使用DD命令实现磁盘拷贝&#…...
华为OD机试真题JAVA实现【数组合并】真题+解题思路+代码(20222023)
🔥系列专栏 华为OD机试(JAVA)真题目录汇总华为OD机试(Python)真题目录汇总华为OD机试(C++)真题目录汇总华为OD机试(JavaScript)真题目录汇总文章目录 🔥系列专栏题目输入输出示例一输入输出示例二输入输出解题思路核心知识点...
说说Real DOM和Virtual DOM的区别?优缺点?
说说Real DOM和Virtual DOM的区别?优缺点?Real DOM(真实的DOM)真实dom的优缺点?Virtual DOM(虚拟的DOM)虚拟dom的优缺点?两者的区别Real DOM(真实的DOM) 在页面渲染出的每个节点都是一个真实的DOM结构 <div class"root&…...
使用脚本以可读的 JSON 格式显示 curl 命令输出
在我们经常调试微服务或者使用 Elasticsearch API 时,经常会使用curl 来进行调试。但是有时我们的输出不尽如意。显示的不是一 pretty 格式进行输出的。我们有时还必须借助于其他的一些网站工具,比如 Best JSON Formatter and JSON Validator: Online JS…...
计算机网络9:HTTP和HTTPS的区别
1.HTTP和HTTPS的区别 (1)安全性 HTTP是超文本传输协议,信息传输存在安全问题HTTPS是安全套接字超文本传输协议,在TCP和HTTP之间加入了SSL/TLS安全协议,进行加密传输 (2)连接步骤HTTP建立相对简…...
Spring+SpringMVC+SpringBoot+MyBatis面试题
什么是Spring框架?使用Spring框架的好处是什么?Spring是一款开源的轻量级Java开发框架,可以提高开发人员的开发效率以及系统的可维护性。Spring框架是很多模块的集合,使用这些模块可以很方便地协助我们进行开发,比如说…...
ContextCapture Master 倾斜摄影测量实景三维建模技术
ContextCapture实景建模大师是一套无需人工干预,通过影像自动生成高分辨率的三维模型的软件解决方案。它集合了全球最先进数字影像处理、计算机虚拟现实以及计算机几何图形算法,在易用性、数据兼容性、运算性能、友好的人机交互及自由的硬件配置兼容性等…...
MySQL事务
文章目录MySQL事务事务的四个特性 ACID事务提交的类型事务的使用MySQL事务 事务是什么? 事务就是一组逻辑操作单元,是数据从一种状态变成另外一种状态。整个单元有一个或多个SQL语句构成,在这个操作单元中,每一个SQL语句相互依赖…...
CData Drivers for Acumatica
CData Drivers for Acumatica Acumatica的CData驱动程序为用户提供了使用AcumaticaERP数据的便捷途径,该数据来自商业智能、分析、定制应用程序、报告以及ETL。通过JDBC、ADO.NET和ODBC等标准驱动程序,以及与PowerShell、Power BI、Excel、SSIS等流行应用…...
智慧税务+数据可视化:企业财务管理告别难题
一、引言在发展社会主义市场经济的过程中,税收承担着组织财政收入、调控经济、调节社会分配的职能。中国每年财政收入的90%以上来自税收,其地位和作用越来越重要,可称之为国家经济的“晴雨表”,有效进行税务管理、充分挖掘税务大数…...
Ansible中常用的模块
目录 一、Ansible Ad-Hoc命令集 1 Ad-hoc 使用场景 2 Ansible的并发特性 3 Ansible-doc用法 4 ansible命令运行方式及常用参数 5 ansible的基本颜色代表 6 ansible中的常用模块 command模块 shell模块 script模块 copy模块 fetch模块 unarchive模块 archive模块…...
问:你是如何进行react状态管理方案选择的?
前言:最近接触到一种新的(对我个人而言)状态管理方式,它没有采用现有的开源库,如redux、mobx等,也没有使用传统的useContext,而是用useState useEffect写了一个发布订阅者模式进行状态管理&…...
【华为OD机试真题 java、python、jsNode】任务总执行时长【2022 Q4 100分】
代码请进行一定修改后使用,本代码保证100%通过率,本题提供了 java、python、JsNode三种代码 题目描述 任务编排服务负责对任务进行组合调度。参与编排的任务有两种类型,其中一种执行时长为taskA,另一种执行时长为taskB。任务一旦开始执行不能被打断,且任务可连续执行。服…...
react基础
react组件传参 父传子 父组件 < ChildA value{this.state.num}></ChildA> 子组件 {props.value}接收父组件传入参数 ChildA.defaultProps{vaue:1} defaultProps默认参数 子传父 props回调函数形式 父 setNum>v>this.setState({num:v}) v形参 < ChildA…...
【Spark分布式内存计算框架——Spark SQL】2. SparkSQL 概述(上)
第二章 SparkSQL 概述 Spark SQL允许开发人员直接处理RDD,同时可以查询在Hive上存储的外部数据。Spark SQL的一个重要特点就是能够统一处理关系表和RDD,使得开发人员可以轻松的使用SQL命令进行外部查询,同时进行更加复杂的数据分析。 2.1 前…...
Kubeadm搭建K8S
目录 一、部署步骤 1、实验环境 2、环境准备 3、所有节点安装Docker 4、 所有节点配置K8S源 5、所有节点安装kubeadm,kubelet和kubectl 6、部署 kubernetes Master 节点 7、token制作 8、k8s-node节点加入master节点 9、 master节点安装部署pod网络插件&a…...
【技术分享】搭建java项目引入外部依赖教程
文章目录引言如何在linux中编译运行java程序IDEA中新建一个简单的java工程项目并运行IDEA中如何引入外部依赖并运行maven引入log4j jar包手工引入log4j jar包如何使用命令行的方式添加外部依赖如何新建一个spring源码项目并为其添加依赖给定一个spring工程源码,如何…...
算法 ——世界 二
个人简介:云计算网络运维专业人员,了解运维知识,掌握TCP/IP协议,每天分享网络运维知识与技能。个人爱好: 编程,打篮球,计算机知识个人名言:海不辞水,故能成其大;山不辞石…...
数据治理CDGP选择题 4
5、根据DMBOK2,在实施数据治理时,要注重数据标准的建设,以下关于数据标准的描述,哪个选项是不正确的? (知识点: CDGP仿真题)A.数据标准必须得到有效沟通、监控,并被定期审查和更新;最重要的是,必须有强制手…...
动态规划之01背包问题和完全背包问题
01背包的问题描述:(内容参考代码随想录)有n件物品和一个最多能背重量为w 的背包。第i件物品的重量是weight[i],得到的价值是value[i] 。每件物品只能用一次,求解将哪些物品装入背包里物品价值总和最大。问题示例&#…...
MATLAB算法实战应用案例精讲-【图像处理】数字图像灰度化(附Java、python、matlab和opencv代码实现)
目录 前言 几个相关概念 1、RGB 2、ARGB 3、灰度化 4.图像点运算 5.线性点运算...
Linux(强大的yum命令)
yum 读 [jʌm] ,中文谐音: 样安ing。 yum( Yellow dog Updater, Modified)是一个在 Fedora 和 RedHat 以及 SUSE 中的 Shell 前端软件包管理器。 基于 RPM 包管理,能够从指定的服务器自动下载 RPM 包并且安装&#x…...
怎么知道网站有没有备案/2345网址导航删除办法
React 路由理解: 什么是路由?1: 一个路由就是一个映射关系(key: value);2: key: 为路径, value: 为function 或者component路由的分类:后端路由: 理解为: value是 functuion, 用来处理客户提交的请求。注册路由: router.get(path, (ctx, next)> {});工作过程: 当…...
开源企业网站/重庆网站搜索引擎seo
NO.1 Java.alng.NullPointerException这个异常大家肯定都经常遇到,异常的解释是“程序遇上了空指针“,简单地说就是调用了未经初始化的对象或者是不存在的对象,这个错误经常出现在创建图片,调用数组这些操作中,比如图片…...
有人用公司名字做网站 怎么维权/google引擎免费入口
阅读本文大概需要 15 分钟。作者:云效鼓励师来源:https://yq.aliyun.com/articles/593097大规模的容器技术运用从来不是一项独立工程,而是一个汇集虚拟化技术、容器编排、任务调度、操作系统、容器仓库、跨节点网络、分布式存储、动态扩缩、负…...
烟台高端网站建设公司/新媒体运营需要哪些技能
这里select classno 班级, avg(score) 平均分 into avgScore就出现了问题,改为 create or replace procedure myproc(classno1 i执行insert的时候出现这个错误。insert into 表1 values (123,2423,12);表1的结构有4个column,显然插入的值只有三个&#x…...
wordpress如何页面静态/上海网站快速排名提升
2019独角兽企业重金招聘Python工程师标准>>> WWDC 2017 Session笔记 - Session 708 推送消息新功能和最佳实践(Best Practices and What’s New in User Notifications) WWDC 2017 Session笔记 - Session 708 推送消息新功能和最佳实践Best P…...
兰州网站建设哪家专业/专业seo推广
数组指针字符串C语言程序的设计-第4节,3,4,5; aarray3; array36; void main() int array5,i ; /使用循环语句对数组的5个元素分别赋值 for (i0; i5; i) arrayii*i; /分别输出数组元素的值 for (i0; i5; i) cout下标为i的元素的值是: arrayiendl; C语言系统对数组的下…...