私の連絡先情報
郵便メール:
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Elasticsearch では、デフォルトのスコアリング メカニズム (BM25 アルゴリズムなど) により、ほとんどの場合、良好な検索結果ランキングが提供されます。ただし、特定のシナリオでは、ビジネス ニーズに基づいて検索結果をより詳細に並べ替える必要がある場合があります。現時点では、Elasticsearch は、これらの複雑なニーズを満たすカスタム スコアリング (関数スコア クエリ) 関数とスクリプト スコアリング (スクリプト スコア) 関数を提供します。この記事では、Elasticsearch でスコアリングとスクリプト スコアリングをカスタマイズする方法について詳しく説明します。
カスタム スコアリングを使用すると、事前定義された関数のセットに基づいて各ドキュメントのデフォルト スコアを変更できます。これらの関数は、ドキュメントのフィールド値、クエリ基準、またはその他の要素に基づいて新しい評価を計算できます。最終的に、Elasticsearch は元のスコアとカスタム スコアを組み合わせて、検索結果のランキングを決定します。
Elasticsearch には、カスタム スコアリング用のさまざまな組み込み関数が用意されています。これには次のものが含まれますが、これらに限定されません。
電子商取引 Web サイトがあり、ユーザーが製品を検索するときに製品の価格と評価の両方を考慮したいとします。私たちは使うことができますfunction_score
この要件を達成するには次のクエリを実行します。
GET /products/_search
{
"query": {
"function_score": {
"query": {
"match": {
"name": "手机"
}
},
"functions": [
{
"field_value_factor": {
"field": "price",
"modifier": "reciprocal",
"params": {
"scale": 100
}
}
},
{
"field_value_factor": {
"field": "rating",
"missing": 1.0
}
}
],
"score_mode": "sum",
"boost_mode": "replace"
}
}
}
この例では、field_value_factor
この関数は、商品の価格と評価に基づいてカスタム評価を計算します。価格は逆減衰を使用します (reciprocal
)、価格が低い商品ほどスコアが高くなります。スコアにはフィールド値が直接使用されます。最後に、両方の関数の評価を追加し、元の評価を置き換えます。
スクリプト スコアリングを使用すると、カスタム スクリプト言語 (Painless など) を使用してドキュメントのスコアを計算できます。このアプローチは非常に高い柔軟性を提供し、ほぼすべてのロジックに基づいてスコアを計算できます。
製品の在庫数量に基づいて評価を調整すると、在庫が少ない製品の評価が高くなるとします。私たちは使うことができますscript_score
この要件を達成するための関数:
GET /products/_search
{
"query": {
"function_score": {
"query": {
"match": {
"name": "手机"
}
},
"functions": [
{
"script_score": {
"script": {
"source": "Math.max(0, 1 - doc['stock'].value / 100.0)",
"lang": "painless"
}
}
}
],
"score_mode": "multiply",
"boost_mode": "replace"
}
}
}
この例では、Painless スクリプト言語を使用して評価を計算します。スクリプトは製品の在庫数量を決定します (doc['stock'].value
) 在庫数量が多いほどスコアが低くなり、在庫数量が少ないほどスコアが高くなります。次に、このスコアに元の評価を乗算して、検索結果の最終的なランキングを調整します。
カスタム スコアリングとスクリプト スコアリングは、Elasticsearch が提供する強力な機能であり、ビジネス ニーズに応じて検索結果を絞り込むことができます。これらの機能を合理的に活用することで、ユーザーエクスペリエンスを向上させ、ユーザーの多様なニーズに応えることができます。ただし、カスタム スコアリングとスクリプト スコアリングはクエリの複雑さと計算コストを増加させる可能性があるため、実際のアプリケーションでは長所と短所を比較検討し、慎重に使用する必要があることに注意してください。