Включение статических сигналов релевантности в оценку
Во многих областях существуют статические сигналы, известные своей корреляцией с релевантностью. Например, PageRank и длина URL — две часто используемые функции для поиска в веб-среде, позволяющие настраивать оценку веб-страниц независимо от запроса.
Есть два основных запроса, которые позволяют объединять вклад статической оценки с текстовой релевантностью, например, вычисленной с помощью BM25:
Например, предположим, что у вас есть поле pagerank, которое вы хотите объединить с оценкой BM25, чтобы итоговая оценка была равна score = bm25_score + pagerank / (10 + pagerank).
С помощью запроса script_score запрос будет выглядеть так:
resp = client.search(
index="index",
query={
"script_score": {
"query": {
"match": {
"body": "elasticsearch"
}
},
"script": {
"source": "_score * saturation(doc['pagerank'].value, 10)"
}
}
},
)
print(resp) response = client.search(
index: 'index',
body: {
query: {
script_score: {
query: {
match: {
body: 'elasticsearch'
}
},
script: {
source: "_score * saturation(doc['pagerank'].value, 10)"
}
}
}
}
)
puts response const response = await client.search({
index: "index",
query: {
script_score: {
query: {
match: {
body: "elasticsearch",
},
},
script: {
source: "_score * saturation(doc['pagerank'].value, 10)",
},
},
},
});
console.log(response); GET index/_search
{
"query": {
"script_score": {
"query": {
"match": { "body": "elasticsearch" }
},
"script": {
"source": "_score * saturation(doc['pagerank'].value, 10)"
}
}
}
} |
|
в то время как с запросом rank_feature он будет выглядеть так:
resp = client.search(
query={
"bool": {
"must": {
"match": {
"body": "elasticsearch"
}
},
"should": {
"rank_feature": {
"field": "pagerank",
"saturation": {
"pivot": 10
}
}
}
}
},
)
print(resp) response = client.search(
body: {
query: {
bool: {
must: {
match: {
body: 'elasticsearch'
}
},
should: {
rank_feature: {
field: 'pagerank',
saturation: {
pivot: 10
}
}
}
}
}
}
)
puts response const response = await client.search({
query: {
bool: {
must: {
match: {
body: "elasticsearch",
},
},
should: {
rank_feature: {
field: "pagerank",
saturation: {
pivot: 10,
},
},
},
},
},
});
console.log(response); GET _search
{
"query": {
"bool": {
"must": {
"match": { "body": "elasticsearch" }
},
"should": {
"rank_feature": {
"field": "pagerank",
"saturation": {
"pivot": 10
}
}
}
}
}
} |
|
Хотя оба варианта вернут похожие оценки, есть компромиссы: script_score обеспечивает большую гибкость, позволяя комбинировать оценку текстовой релевантности со статическими сигналами по вашему усмотрению. С другой стороны, запрос rank_feature предоставляет лишь несколько способов включения статических сигналов в оценку. Однако он полагается на поля rank_feature и rank_features, которые индексируют значения особым способом, позволяющим запросу rank_feature пропустить неконкурентные документы и быстрее получить лучшие совпадения по запросу.
© 2023-2025 Elasticsearch
As of September 2024, Elasticsearch is available under a choice of three licenses: the Server Side Public License (SSPL), the Elastic License, or the AGPLv3 (OSI approved).
Elasticsearch and the Elasticsearch logo are trademarks of Elasticsearch B.V., registered in the U.S. and in other countries.
https://www.elastic.co/guide/en/elasticsearch/reference/8.17/static-scoring-signals.html