現在の位置: ホーム> 最新記事一覧> PHP ElasticSearch検索結果のソートアルゴリズムを最適化する方法は?効率と精度を向上させます

PHP ElasticSearch検索結果のソートアルゴリズムを最適化する方法は?効率と精度を向上させます

M66 2025-06-20

重量値で並べ替えます

ElasticSearchでは、デフォルトのソート方法は、スコアリングアルゴリズム(つまり、相関)に基づいてソートすることです。ただし、価格、販売などの特定のビジネスニーズに基づいて検索結果をソートする必要がある場合があります。これを行うには、体重値(ブースト)を使用して、ソートの優先度を調整できます。

フィールド「名前)と「価格」(価格)を含む製品インデックスがあるとします。価格の降順で並べ替えたい場合は、次のコードを使用できます。

Get /Products /_Search
{
  「クエリ」:{
    「match_all」:{}
  }、
  "選別": [
    {
      "価格": {
        「注文」:「DESC」
      }
    }
  ]
}

このコードはすべてのアイテムを返し、結果を下降順序で並べ替えます。実際のニーズに応じて、ソートフィールドを変更できます。

複雑なソートルールを定義します

関数スクリプトを使用して実装できる複数の条件に従ってソートする必要がある場合があります。製品の評価と販売量で並べ替えたいとします。ここでは、評価の重みが0.7で、販売量の重量は0.3です。これを達成するためのコードは次のとおりです。

まず、インデックスを作成するときは、評価と販売分野を追加する必要があります。

プット /製品
{
  「マッピング」:{
    「プロパティ」:{
      "名前": {
        「タイプ」:「テキスト」
      }、
      「評価」:{
        「タイプ」:「フロート」
      }、
      「販売」:{
        「タイプ」:「整数」
      }
    }
  }
}

次に、関数スクリプトを使用して、照合を定義します。

Get /Products /_Search
{
  「クエリ」:{
    「match_all」:{}
  }、
  "選別": [
    {
      "_script":{
        「タイプ」:「番号」、
        「スクリプト」:{
          "source": "(0.7 * doc ['rating']。値) +(0.3 * doc ['sales']。値)"
        }、
        「注文」:「DESC」
      }
    }
  ]
}

このコードは、評価と販売の加重平均に基づいて検索結果を並べ替えます。特定のニーズに応じて、重量値と計算方法を調整できます。

フィールドマッピングの種類と設定を最適化します

ElasticSearchは、検索結果の種類を最適化するのに役立つさまざまなマッピングタイプと設定を提供します。特に、次のオプションはソートに非常に役立ちます。

  • 「index」:「not_analyzed」 :フィールドが分​​割されないようにする必要がある場合は、フィールドをワードパルティックモードに設定して、ソートの精度を確保することができます。
  • 「fielddata」:true :しばしばソートする必要があるフィールドの場合、「fielddata」を有効にすると、フィールド値をメモリにロードできるため、ソートパフォーマンスが向上します。

たとえば、ユーザーの年齢でソートしたいと考えています。まず、インデックスを作成するときは、フィールドマッピングを設定する必要があります。

put /users
{
  「マッピング」:{
    「プロパティ」:{
      "名前": {
        「タイプ」:「テキスト」
      }、
      "年": {
        「タイプ」:「キーワード」、
        「インデックス」:「not_analyzed」、
        「fielddata」:本当です
      }
    }
  }
}

次に、次のコードを使用して、年齢の昇順で並べ替えます。

get /users /_search
{
  「クエリ」:{
    「match_all」:{}
  }、
  "選別": [
    {
      "年": {
        「注文」:「ASC」
      }
    }
  ]
}

このコードは、ユーザーの年齢に応じて昇順にソートされます。

要約します

重量値の並べ替え、複雑なソートルールの定義、およびフィールドマッピングの種類と設定を最適化することにより、ElasticSearchのソート検索結果の効率と精度を大幅に向上させることができます。さまざまなビジネスニーズに応じて、これらの最適化方法を柔軟に調整して、より良い検索エクスペリエンスを実現できます。