dak ブログ

python、rubyなどのプログラミング、MySQL、サーバーの設定などの備忘録。レゴの写真も。

Elasticsearch で数値のフィールドの値によるスコアリング

2022-12-11 13:46:35 | elasticsearch
Elasticsearch で数値のフィールドの値によるスコアリングのメモ。
value フィールドの値の重みを変更してスコアがどう変わるかを確認します。

■インデックス定義
{
  "mappings": {
    "dynamic": "strict",
    "properties": {
      "id": {"type": "keyword", "store": "true"},
      "title": {"type": "text", "store": "true"},
      "body": {"type": "text", "store": "true"},
      "value": {"type": "float", "store": "true"}
    }
  }
}

■クエリパターン
{
  "query": {
    "function_score": {
      "query": {
        "bool": {
          "should": [
            {"match": {"title": {"query": "abc", "boost": 【title_boost】}}},
            {"match": {"body": {"query": "abc", "boost": 【body_boost】}}}
          ]
        }
      },
      "functions": [
        {"field_value_factor": {
          "field": "value",
          "modifier": "none",
          "factor": 【value_factor】
        }}
      ],
      "score_mode": "sum",
      "boost_mode": "sum"
    }
  },
  "_source": ["id", "title", "score"]
}

■title_boost: 1.0、body_boost: 1.0、value_factor: 0.0 の場合
    "hits" : [
      {
        "_index" : "idx2",
        "_id" : "doc_01",
        "_score" : 2.059239,
        "_source" : {
          "id" : "doc_01",
          "title" : "商品1 abc社"
        }
      },
      {
        "_index" : "idx2",
        "_id" : "doc_02",
        "_score" : 2.059239,
        "_source" : {
          "id" : "doc_02",
          "title" : "商品2 abc社"
        }
      }
    ]

■title_boost: 1.0、body_boost: 1.0、value_factor: 1.0 の場合
doc_01 の value の値(1.0)、doc_02 の value の値(2.0)が加算されています。
    "hits" : [
      {
        "_index" : "idx2",
        "_id" : "doc_02",
        "_score" : 4.059239,
        "_source" : {
          "id" : "doc_02",
          "title" : "商品2 abc社"
        }
      },
      {
        "_index" : "idx2",
        "_id" : "doc_01",
        "_score" : 3.059239,
        "_source" : {
          "id" : "doc_01",
          "title" : "商品1 abc社"
        }
      }
    ]

■title_boost: 1.0、body_boost: 1.0、value_factor: 10.0 の場合
doc_01 の value の値(1.0)、doc_02 の value の値(2.0)の 10倍の値が加算されています。
    "hits" : [
      {
        "_index" : "idx2",
        "_id" : "doc_02",
        "_score" : 22.059238,
        "_source" : {
          "id" : "doc_02",
          "title" : "商品2 abc社"
        }
      },
      {
        "_index" : "idx2",
        "_id" : "doc_01",
        "_score" : 12.059238,
        "_source" : {
          "id" : "doc_01",
          "title" : "商品1 abc社"
        }
      }
    ]


この記事についてブログを書く
« Elastcisearch でフィールド... | トップ | BigQuery で array にデータ... »

elasticsearch」カテゴリの最新記事