06.full_text multi_match查询
文章目录
- 1. multi_match 简介
- 2. multi_match 查询类型
- 1. best_fields
- 2. most_fields
- 3. phrase和phrase_prefix
- 4. cross_fields
- 5. bool_prefix
1. multi_match 简介
这个multi_match实际上算是类似一个组合查询,他把dis_max query, phrase query, phrase_prefix,bool_prefix等给打包到一起了,使用的时候按照需要选用就可以了,这样的话就更加简单易用了。
但是在使用的时候又不想纯粹的只做组合的query(bool query,dis_max query等),哪些只做组合的query没有自己的查询语法,只是组合别的查询query,multi_match有自己的查询语法,是对多个查询类型的封装,暴露给外面的是一个新的api,不是bool那种还是使用子query的查询方式。而且他允许多字段查询。
一个简单的样例
GET /_search
{"query": {"multi_match" : {"query": "this is a test", "fields": [ "subject", "message" ] }}
}GET /_search
{"query": {"multi_match" : {"query": "Will Smith","fields": [ "title", "*_name" ] #filed 的name可以使用通配符}}
}GET /_search
{"query": {"multi_match" : {"query" : "this is a test","fields" : [ "subject^3", "message" ] # subject会被提升权重}}
}
field的数量不能超过1024
2. multi_match 查询类型
multi_match 是如何支持dis_max,phrase,phrase_prefix等等查询的呢,在这里引入了一个参数叫 type,type的取值如下
best_fields:(默认)查找与任何字段匹配的文档,但使用最佳字段中的_score。请参阅best_fields。
most_fields: 查找与任何字段匹配的文档,并组合每个字段的_score。请参阅most_fields。
cross_fields: 使用相同的分析器将多个字段内容视为一个大字段。在大字段中查找每个单词。参见cross_fields。
phrase: 在每个字段上运行match_phrase查询,并使用最佳字段中的_score。参见词组和词组前缀。
phrase_prefix: 在每个字段上运行match_phrase_prefix查询,并使用最佳字段中的_score。参见词组和词组前缀。
bool_prefix: 在每个字段上创建一个match_bool_prefix查询,并组合每个字段中的_score。请参阅bool_prefix。
1. best_fields
当您在同一字段中search多个单词时,best_fields类型最有用。例如,搜索“brown fox”的时候,单个字段中的“brown fox”比一个字段中的“brown”和另一字段中的“ fox”更有意义。
best_fields类型为每个字段生成一个匹配查询,并将它们包装在dis_max查询中,以查找单个最佳匹配字段。例如,此查询:
GET /_search
{"query": {"multi_match" : {"query": "brown fox","type": "best_fields","fields": [ "subject", "message" ],"tie_breaker": 0.3}}
}
GET /_search
{"query": {"dis_max": {"queries": [{ "match": { "subject": "brown fox" }},{ "match": { "message": "brown fox" }}],"tie_breaker": 0.3}}
}
其中的tie_breaker和dis_max的查询是一样的含义
因为best_fields and most_fields 的multi_match是以field为中心进行查询的,所以operator和minimum_should_match参数会单独的对每个field起作用
GET /_search
{"query": {"multi_match" : {"query": "Will Smith","type": "best_fields","fields": [ "first_name", "last_name" ],"operator": "and" }}
}
这个对应的语义是
(+first_name:will +first_name:smith) | (+last_name:will +last_name:smith)
2. most_fields
当多个field对相同内容采用不用的analyze进行存储,如果想对这多个字段进行搜索从而获得更加准确的结果的话,使用most_fields更加合适。比如,main field可能包含synonums,stemming , terms without diacritic(变音符),
second field 包含了原有的terms, third field 包含了shingles。这样的话就可以使用三个field的score来计算final score进而得到更好的排序效果。
GET /_search
{"query": {"multi_match" : {"query": "quick brown fox","type": "most_fields","fields": [ "title", "title.original", "title.shingles" ]}}
}
GET /_search
{"query": {"bool": {"should": [{ "match": { "title": "quick brown fox" }},{ "match": { "title.original": "quick brown fox" }},{ "match": { "title.shingles": "quick brown fox" }}]}}
}
3. phrase和phrase_prefix
phrase_prefix 和phrase和 best_fields类似
也可以使用tie_breaker参数,同时还可以使用boost,lenient,slop等在match_phase中使用的参数
GET /_search
{"query": {"multi_match" : {"query": "quick brown f","type": "phrase_prefix","fields": [ "subject", "message" ]}}
}
等同于
GET /_search
{"query": {"dis_max": {"queries": [{ "match_phrase_prefix": { "subject": "quick brown f" }},{ "match_phrase_prefix": { "message": "quick brown f" }}]}}
}
4. cross_fields
cross_fields类型对于结构化文档(其中多个字段应匹配)特别有用。例如,当在first_name和last_name字段中查询“ Will Smith”时,最匹配的一个字段中可能有“ Will”,而另一个字段中有“ Smith”。
GET /_search
{"query": {"multi_match" : {"query": "Will Smith","type": "cross_fields","fields": [ "first_name", "last_name" ],"operator": "and"}}
}
执行的逻辑是
+(first_name:will last_name:will)
+(first_name:smith last_name:smith)
5. bool_prefix
GET /_search
{"query": {"multi_match" : {"query": "quick brown f","type": "bool_prefix","fields": [ "subject", "message" ]}}
}
06.full_text multi_match查询相关推荐
- [Elasticsearch2.x] 多字段搜索 (三) - multi_match查询和多数字段 译
multi_match查询 multi_match查询提供了一个简便的方法用来对多个字段执行相同的查询. NOTE 存在几种类型的multi_match查询,其中的3种正好和在"了解你的数据 ...
- multi_match 查询【muti_match和match区别】
2019独角兽企业重金招聘Python工程师标准>>> ======================================[建议]:类型most_fields与多个matc ...
- multi_match 查询
文章目录 fields 和每个字段的增强 multi_match 查询的类型 best_fields most_fields phrase 和 phrase_prefix cross_fields c ...
- Elasticsearch多字段搜索 - multi_match查询和多数字段-----multi_match查询
multi_match查询提供了一个简便的方法用来对多个字段执行相同的查询. best_fields,most_fields以及cross_fields. 默认情况下,该查询以best_fields类 ...
- 03.full_text interval查询
文章目录 1. intervals query 简介 2. 样例 3. match 4. all_of 5. any_of 6. filter full text查询就是基于分词的查询,有很多分类 i ...
- elasticsearch优化之多字段搜索multi_match查询
1 首先说下multi_match多字段匹配的三种类型,分别是best_fields(最佳字段) . most_fields(多数字段) 和 cross_fields(跨字段) 2 best_fiel ...
- 04.full_text match查询
文章目录 1. match query 简介 2. 简写方式 3. 查询工作原理 4. match查询中的fuzzniess 1. Levenshtein Edit Distance 2. fuzzi ...
- 06 MySQL数据库--查询语句学习笔记
整理各种查询语句,需要查询数据请参考: https://blog.csdn.net/chennuan1991/article/details/105240457 基础查询语句,请参考: https:/ ...
- ElasticSearch查询 基础篇
1. 查询表达式 查询表达式(Query DSL)是一种非常灵活又富有表现力的 查询语言. Elasticsearch 使用它可以以简单的 JSON 接口来展现 Lucene 功能的绝大部分.在你的应 ...
最新文章
- 用按键精灵自动消除行号失败记
- QML做类似Android圆形头像
- 心脏与阴影,求阴影部分
- 【BZOJ1434】【codevs2348】染色游戏,博弈
- 记一次Spring Batch完整入门实践
- Microsoft Data Access Components(MDAC) 结构以及一些连接SQL数据库的架构基础
- EasyUI的databox取值
- 168.Excel Sheet Column Title
- c++的vector初始化
- 各种计算机控制系统特点小结
- centos 7 iso u盘安装_树莓派Raspberry Pi 4B安装VMware ESXi
- Python网抓 2021年 获取全部沪深港股ETF股票信息 东方财富
- 天天背单词--的设计与实现(四)
- 计算机是好是坏英语作文,电脑游戏是好还是坏英语作文
- 用I2C级联扩展器做一个时钟盒子
- ANSYS APDL
- 在Windows上挂载磁盘为非445端口的SAMBA服务(原创)
- 2021蓝桥杯省赛b题解
- python爬虫爬取《斗破苍穹》小说全文
- mybatis-plus字典回写工具包
热门文章
- 科普:CPU缓存一致性协议
- TOP级CG行业云渲染服务的演进之路
- 复杂网络下多码率视频流切换关键技术
- LeetCode——DFS
- GitHub超实用操作
- linux之autoconf/automake
- storage.googleapis.com 访问与下载慢
- hiredis使用,封装代码示例
- leetcode 794. Valid Tic-Tac-Toe State | 794. 有效的井字游戏(Java)
- leetcode 384. Shuffle an Array | 384. 打乱数组(Fisher-Yates洗牌算法)