Elasticsearch:スクリプト関数のソースパラメーターを最適化する方法は?

Elasticsearchインデックスに次のデータがあります products

{
  "took" : 0,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 4,
      "relation" : "eq"
    },
    "max_score" : 1.0,
    "hits" : [
      {
        "_index" : "products",
        "_type" : "_doc",
        "_id" : "1",
        "_score" : 1.0,
        "_source" : {
          "prod_id" : 1,
          "currency" : "USD",
          "price" : 1
        }
      },
      {
        "_index" : "products",
        "_type" : "_doc",
        "_id" : "2",
        "_score" : 1.0,
        "_source" : {
          "prod_id" : 2,
          "currency" : "INR",
          "price" : 60
        }
      },
      {
        "_index" : "products",
        "_type" : "_doc",
        "_id" : "3",
        "_score" : 1.0,
        "_source" : {
          "prod_id" : 3,
          "currency" : "EUR",
          "price" : 2
        }
      },
      {
        "_index" : "products",
        "_type" : "_doc",
        "_id" : "5",
        "_score" : 1.0,
        "_source" : {
          "prod_id" : 5,
          "currency" : "MYR",
          "price" : 1
        }
      }
    ]
  }
}

priceフィールドに基づいてデータを並べ替え
ています。そのための次のスクリプトがあります-

GET products/_search
{
    "query": {
        "function_score": {
            "query": {
                "match_all": {}
            },
            "functions": [{
                "script_score": {
                    "script": {
                        "params": {
                            "USD": 1,
                            "SGD": 0.72,
                            "MYR": 0.24,
                            "INR": 0.014,
                            "EUR": 1.12
                        },
                        "source": "doc['price'].value * (doc.currency.value == 'eur'? params.EUR : doc.currency.value == 'myr' ? params.MYR : doc.currency.value == 'inr' ? params.INR : 1)"
                    }
                }
            }]
        }
    },
    "sort": [
    {
      "_score": {
        "order": "desc"
      }
    }
  ]
}

インデックスのフィールドcurrencyproductテキスト型であるため、標準アナライザー
インデックスが作成され、小文字に変換されます。

スクリプトのこの部分を最適化したいと思います。最終的に20〜30通貨になる可能性があるためです。

"source": "doc['price'].value * (doc.currency.value == 'eur'? params.EUR : doc.currency.value == 'myr' ? params.MYR : doc.currency.value == 'inr' ? params.INR : 1)"

次の実用的なソリューションでソーススクリプトを最適化することができました-

GET products/_search
{
    "query": {
        "function_score": {
            "query": {
                "match_all": {}
            },
            "functions": [{
                "script_score": {
                    "script": {
                        "params": {
                            "USD": 1,
                            "SGD": 0.72,
                            "MYR": 0.24,
                            "INR": 0.014,
                            "EUR": 1.12
                        },
                        "source": "doc['price'].value * params[doc['currency.keyword'].value]"
                    }
                }
            }]
        }
    },
    "sort": [
    {
      "_score": {
        "order": "desc"
      }
    }
  ]
}

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

リストを返すフィクスチャを使用してpytest関数をパラメータ化する最良の方法は何ですか?

分類Dev

Python:関数パラメーターを最適化する方法は?

分類Dev

複数のパターンを持つ複数のgzipファイルを解析するbashスクリプトを最適化する方法は?

分類Dev

最終クラスのメソッドは、デフォルトで関数最適化へのポインターに適用されますか?

分類Dev

テンプレート パラメーターを使用しないテンプレート クラスのメソッドに対するコンパイラの最適化はありますか?

分類Dev

複数のCASEステートメントでSELECTクエリを最適化する方法は?

分類Dev

最適化:最も最適化された方法でクラスターのリストを作成します

分類Dev

関数テンプレートのインスタンス化からテンプレートパラメータを推測する方法は?

分類Dev

Pandas groupby:パラメーターのリスト内の各パラメーターに集計関数を適用する方法

分類Dev

bashスクリプトで、ある関数から別の関数への関数呼び出しで引数/パラメーターを渡す方法

分類Dev

クラス関数を他のクラスメソッドのパラメータとして使用する方法

分類Dev

ワンクラスSVMでグリッド検索ハイパーパラメータ最適化を実行する方法はありますか

分類Dev

関数テンプレートをテストのパラメーターにする方法は?

分類Dev

関数のリストをパラメーター、clojureに適用します

分類Dev

最適化されたパラメータをリストとしてlightgbmに渡す方法は?

分類Dev

プリロード関数の外部でsapperのURLパラメータにアクセスする方法は?

分類Dev

TreeSetをLinkedHashSetにソートパラメータを使用して、ストリーム関数を作成する方法

分類Dev

bashの関数内からスクリプトの位置パラメーターを取得する方法はありますか?

分類Dev

関数パラメーターリストではなく関数本体の型を理解する方法

分類Dev

コンストラクターのパラメーターの数をパラメーター化する方法は?

分類Dev

forループオーバーイメージの条件ステートメントを最適化する方法は?

分類Dev

クラウド形成リソース名をパラメーター化する方法はありますか?

分類Dev

パフォーマンスの観点からスクリプトを最適化する方法

分類Dev

パラメータで関数のリストを渡す方法は?(UnityAction [])

分類Dev

コマンドラインから実行するときに、スクリプトでbash関数をパラメーターとして作成するための最良の方法は何ですか?

分類Dev

Gradleでタスクをパラメーター化するための最良の方法は何ですか?

分類Dev

パラメータを受け取るシェルスクリプトで関数を作成する方法

分類Dev

パラメータを受け取るシェルスクリプトで関数を作成する方法

分類Dev

プライベートクラスをパラメータとするパブリック関数

Related 関連記事

  1. 1

    リストを返すフィクスチャを使用してpytest関数をパラメータ化する最良の方法は何ですか?

  2. 2

    Python:関数パラメーターを最適化する方法は?

  3. 3

    複数のパターンを持つ複数のgzipファイルを解析するbashスクリプトを最適化する方法は?

  4. 4

    最終クラスのメソッドは、デフォルトで関数最適化へのポインターに適用されますか?

  5. 5

    テンプレート パラメーターを使用しないテンプレート クラスのメソッドに対するコンパイラの最適化はありますか?

  6. 6

    複数のCASEステートメントでSELECTクエリを最適化する方法は?

  7. 7

    最適化:最も最適化された方法でクラスターのリストを作成します

  8. 8

    関数テンプレートのインスタンス化からテンプレートパラメータを推測する方法は?

  9. 9

    Pandas groupby:パラメーターのリスト内の各パラメーターに集計関数を適用する方法

  10. 10

    bashスクリプトで、ある関数から別の関数への関数呼び出しで引数/パラメーターを渡す方法

  11. 11

    クラス関数を他のクラスメソッドのパラメータとして使用する方法

  12. 12

    ワンクラスSVMでグリッド検索ハイパーパラメータ最適化を実行する方法はありますか

  13. 13

    関数テンプレートをテストのパラメーターにする方法は?

  14. 14

    関数のリストをパラメーター、clojureに適用します

  15. 15

    最適化されたパラメータをリストとしてlightgbmに渡す方法は?

  16. 16

    プリロード関数の外部でsapperのURLパラメータにアクセスする方法は?

  17. 17

    TreeSetをLinkedHashSetにソートパラメータを使用して、ストリーム関数を作成する方法

  18. 18

    bashの関数内からスクリプトの位置パラメーターを取得する方法はありますか?

  19. 19

    関数パラメーターリストではなく関数本体の型を理解する方法

  20. 20

    コンストラクターのパラメーターの数をパラメーター化する方法は?

  21. 21

    forループオーバーイメージの条件ステートメントを最適化する方法は?

  22. 22

    クラウド形成リソース名をパラメーター化する方法はありますか?

  23. 23

    パフォーマンスの観点からスクリプトを最適化する方法

  24. 24

    パラメータで関数のリストを渡す方法は?(UnityAction [])

  25. 25

    コマンドラインから実行するときに、スクリプトでbash関数をパラメーターとして作成するための最良の方法は何ですか?

  26. 26

    Gradleでタスクをパラメーター化するための最良の方法は何ですか?

  27. 27

    パラメータを受け取るシェルスクリプトで関数を作成する方法

  28. 28

    パラメータを受け取るシェルスクリプトで関数を作成する方法

  29. 29

    プライベートクラスをパラメータとするパブリック関数

ホットタグ

アーカイブ