本文基于Elasticsearch7.x
Elasticsearch可以控制相关度分数计算的, 让满足一些条件的分数更高.
在学习本篇博客前先了解下Elasticsearch全文搜索之基础语法API
Rest API
Elasticsearch有三种控制相关度分数的方法:
- boost
- boosting
- function_score
添加搜索实例数据
POST /blogs/_bulk
{"index": {}}
{"post_date": "2020-01-01", "title": "Quick brown rabbits", "content": "Brown rabbits are commonly seen.", "author_id": 11401}
{"index": {}}
{"post_date": "2020-01-02", "title": "Keeping pets healthy", "content": "My quick brown fox eats rabbits on a regular basis.", "author_id": 11402}
{"index": {}}
{"post_date": "2020-01-03", "title": "My dog barks", "content": "I see a lot of barking dogs on the road.", "author_id": 11403}
boost
(1) 语法
- 当 boost > 1 时, 打分的权重相对性提升
- 当 0 < boost < 1 时, 打分的权重相对性降低
(2) 实例
GET /blogs/_search
{
"query": {
"bool": {
"should": [
{
"match": {
"content": {
"query": "rabbits",
"boost": 2
}
}
},
{
"match": {
"title": {
"query": "brown",
"boost": 0.1
}
}
}
]
}
}
}
boosting
(1) 语法
- positive
必须匹配的条件 - negative
匹配该条件的文档要减低相关度分数, 最终分数为匹配positive条件的分数 * negative_boost - negative_boost
降低匹配negative条件相关度分数的系数, 取值范围为0~1.0
(2) 实例
GET /blogs/_search
{
"query": {
"boosting": {
"positive": {
"match": {
"title": "rabbits"
}
},
"negative": {
"term": {
"post_date": {
"value": "2020-01-02"
}
}
},
"negative_boost": 0.2
}
}
}
function_score
function_score可以在搜索结束后, 对每一个匹配的文档进行一系列的重新算分, 根据新生成的分数进行排序.
(1) 语法
GET /blogs/_search
{
"query": {
"function_score": {
"query": {
全局匹配条件
},
"functions": [
{
"filter": {
函数生效的匹配条件
},
function
},
{
"filter": {
函数生效的匹配条件
},