前言
- 本文对 Elasticsearch 7.17 适用
如果没有 must 语句,那么至少需要能够匹配其中的一条 should 语句。 但,如果存在至少一条 must 语句,则对 should 语句的匹配没有要求。
以 qbit 当前认知来说,
should
有两个功能功能一:当 must 存在时,给同时匹配到的文档加分 功能二:当 must 不存在时,要求只能能匹配一个 should 子句,相当于'与或非'逻辑中的'或'
- 本文想试验,should 加分加多少,怎样控制加多少
试验
- 创建索引
PUT my_index
{
"mappings": {
"dynamic": false,
"properties": {
"title": {
"type": "text",
"analyzer": "ik_max_word"
},
"abstract": {
"type": "text",
"analyzer": "ik_max_word"
}
}
}
}
- 写入测试数据
POST my_index/_bulk
{ "index": { "_id": "1" } }
{ "title": "地球大数据缘起和进展", "abstract": "进入信息时代以来,数据总量呈爆炸式增长,数据的类型、结构、维度也更加复杂多样,远远超出了传统数据库的管理和处理能力,逐渐向“大数据方向转变.大数据是用于描述超出常规处理能力的数据集术语,其内涵不仅包含海量的数据本身,也包含对这些数据集的存储、处理与分析方法.当前,大数据已经成为国家信息主权的体现,并已在人类社会发展中发挥重要作用" }
must
查询abstract
,得到1.47
分
GET my_index/_search
{
"query": {
"bool": {
"must": [
{
"match": {
"abstract": {
"query": "大数据"
}
}
}
]
}
},
"_source": [ "title" ]
}
must
查询title
,得到0.86
分must
查询abstract
,should
查询title
,得到2.33
分(1.47 + 0.86 = 2.33
)
GET my_index/_search
{
"query": {
"bool": {
"must": [
{
"match": {
"abstract": {
"query": "大数据"
}
}
}
],
"should": [
{
"match": {
"title": {
"query": "大数据"
}
}
}
]
}
},
"_source": [
"title"
]
}
- 为
should
引入boost
,得到3.2
分(1.47 + 0.86 × 2 ≈ 3.2)
GET my_index/_search
{
"query": {
"bool": {
"must": [
{
"match": {
"abstract": {
"query": "大数据"
}
}
}
],
"should": [
{
"match": {
"title": {
"query": "大数据",
"boost": 2
}
}
}
]
}
},
"_source": [
"title"
]
}
小结
should
得分只会与must
得分简单相加,要调控加分可以用should
里面查询语句 的boost
实现
本文出自 qbit snap
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。