スコアへの静的関連信号の組み込み
多くのドメインには、関連性と相関があることが知られている静的信号があります。例えば、PageRankやURLの長さは、クエリに依存せずにウェブページのスコアを調整するために、ウェブ検索で一般的に使用される2つの特徴です。
静的スコアの寄与をテキストの関連性と組み合わせるための2つの主要なクエリがあります。例えば、BM25で計算されたものです: - script_score
クエリ - rank_feature
クエリ
例えば、pagerank
フィールドがあり、BM25スコアと組み合わせたいとします。最終的なスコアがscore = bm25_score + pagerank / (10 + pagerank)
に等しくなるように。
script_score
クエリを使用すると、クエリは次のようになります:
Python
resp = client.search(
index="index",
query={
"script_score": {
"query": {
"match": {
"body": "elasticsearch"
}
},
"script": {
"source": "_score * saturation(doc['pagerank'].value, 10)"
}
}
},
)
print(resp)
Ruby
response = client.search(
index: 'index',
body: {
query: {
script_score: {
query: {
match: {
body: 'elasticsearch'
}
},
script: {
source: "_score * saturation(doc['pagerank'].value, 10)"
}
}
}
}
)
puts response
Js
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);
Console
GET index/_search
{
"query": {
"script_score": {
"query": {
"match": { "body": "elasticsearch" }
},
"script": {
"source": "_score * saturation(doc['pagerank'].value, 10)"
}
}
}
}
pagerank は Numeric としてマッピングされる必要があります |
一方、rank_feature
クエリでは、以下のようになります:
Python
resp = client.search(
query={
"bool": {
"must": {
"match": {
"body": "elasticsearch"
}
},
"should": {
"rank_feature": {
"field": "pagerank",
"saturation": {
"pivot": 10
}
}
}
}
},
)
print(resp)
Ruby
response = client.search(
body: {
query: {
bool: {
must: {
match: {
body: 'elasticsearch'
}
},
should: {
rank_feature: {
field: 'pagerank',
saturation: {
pivot: 10
}
}
}
}
}
}
)
puts response
Js
const response = await client.search({
query: {
bool: {
must: {
match: {
body: "elasticsearch",
},
},
should: {
rank_feature: {
field: "pagerank",
saturation: {
pivot: 10,
},
},
},
},
},
});
console.log(response);
Console
GET _search
{
"query": {
"bool": {
"must": {
"match": { "body": "elasticsearch" }
},
"should": {
"rank_feature": {
"field": "pagerank",
"saturation": {
"pivot": 10
}
}
}
}
}
}
pagerank は rank_feature フィールドとしてマッピングされる必要があります |
両方のオプションは類似のスコアを返しますが、トレードオフがあります: script_score は多くの柔軟性を提供し、テキストの関連性スコアと静的信号を好みに応じて組み合わせることができます。一方、rank_feature
クエリは、スコアに静的信号を組み込む方法をいくつかしか公開していません。しかし、rank_feature
とrank_features
フィールドに依存しており、これらは特別な方法で値をインデックス化し、rank_feature
クエリが競争のないドキュメントをスキップし、クエリのトップマッチをより早く取得できるようにします。