重み付きトークンクエリ

8.15.0で非推奨。

このクエリは、スパースベクターに置き換えられ、今後のリリースで削除されます。

この機能は技術プレビュー中であり、将来のリリースで変更または削除される可能性があります。Elasticは問題を修正するために取り組みますが、技術プレビューの機能は公式GA機能のサポートSLAの対象ではありません。

重み付きトークンクエリは、自然言語処理モデルを使用して計算するのではなく、クエリと共に送信されるトークン-重みペアのリストを必要とします。これらのトークンペアは、スパースベクターまたはランク機能フィールドに対するクエリで使用されます。

重み付きトークンクエリは、外部クエリ拡張モデルを使用したい場合や、新しいモデルを再インデックスせずに変更を迅速にプロトタイプしたい場合に便利です。

例リクエスト

Python

  1. resp = client.search(
  2. query={
  3. "weighted_tokens": {
  4. "query_expansion_field": {
  5. "tokens": {
  6. "2161": 0.4679,
  7. "2621": 0.307,
  8. "2782": 0.1299,
  9. "2851": 0.1056,
  10. "3088": 0.3041,
  11. "3376": 0.1038,
  12. "3467": 0.4873,
  13. "3684": 0.8958,
  14. "4380": 0.334,
  15. "4542": 0.4636,
  16. "4633": 2.2805,
  17. "4785": 1.2628,
  18. "4860": 1.0655,
  19. "5133": 1.0709,
  20. "7139": 1.0016,
  21. "7224": 0.2486,
  22. "7387": 0.0985,
  23. "7394": 0.0542,
  24. "8915": 0.369,
  25. "9156": 2.8947,
  26. "10505": 0.2771,
  27. "11464": 0.3996,
  28. "13525": 0.0088,
  29. "14178": 0.8161,
  30. "16893": 0.1376,
  31. "17851": 1.5348,
  32. "19939": 0.6012
  33. },
  34. "pruning_config": {
  35. "tokens_freq_ratio_threshold": 5,
  36. "tokens_weight_threshold": 0.4,
  37. "only_score_pruned_tokens": False
  38. }
  39. }
  40. }
  41. },
  42. )
  43. print(resp)

Ruby

  1. response = client.search(
  2. body: {
  3. query: {
  4. weighted_tokens: {
  5. query_expansion_field: {
  6. tokens: {
  7. "2161": 0.4679,
  8. "2621": 0.307,
  9. "2782": 0.1299,
  10. "2851": 0.1056,
  11. "3088": 0.3041,
  12. "3376": 0.1038,
  13. "3467": 0.4873,
  14. "3684": 0.8958,
  15. "4380": 0.334,
  16. "4542": 0.4636,
  17. "4633": 2.2805,
  18. "4785": 1.2628,
  19. "4860": 1.0655,
  20. "5133": 1.0709,
  21. "7139": 1.0016,
  22. "7224": 0.2486,
  23. "7387": 0.0985,
  24. "7394": 0.0542,
  25. "8915": 0.369,
  26. "9156": 2.8947,
  27. "10505": 0.2771,
  28. "11464": 0.3996,
  29. "13525": 0.0088,
  30. "14178": 0.8161,
  31. "16893": 0.1376,
  32. "17851": 1.5348,
  33. "19939": 0.6012
  34. },
  35. pruning_config: {
  36. tokens_freq_ratio_threshold: 5,
  37. tokens_weight_threshold: 0.4,
  38. only_score_pruned_tokens: false
  39. }
  40. }
  41. }
  42. }
  43. }
  44. )
  45. puts response

Js

  1. const response = await client.search({
  2. query: {
  3. weighted_tokens: {
  4. query_expansion_field: {
  5. tokens: {
  6. "2161": 0.4679,
  7. "2621": 0.307,
  8. "2782": 0.1299,
  9. "2851": 0.1056,
  10. "3088": 0.3041,
  11. "3376": 0.1038,
  12. "3467": 0.4873,
  13. "3684": 0.8958,
  14. "4380": 0.334,
  15. "4542": 0.4636,
  16. "4633": 2.2805,
  17. "4785": 1.2628,
  18. "4860": 1.0655,
  19. "5133": 1.0709,
  20. "7139": 1.0016,
  21. "7224": 0.2486,
  22. "7387": 0.0985,
  23. "7394": 0.0542,
  24. "8915": 0.369,
  25. "9156": 2.8947,
  26. "10505": 0.2771,
  27. "11464": 0.3996,
  28. "13525": 0.0088,
  29. "14178": 0.8161,
  30. "16893": 0.1376,
  31. "17851": 1.5348,
  32. "19939": 0.6012,
  33. },
  34. pruning_config: {
  35. tokens_freq_ratio_threshold: 5,
  36. tokens_weight_threshold: 0.4,
  37. only_score_pruned_tokens: false,
  38. },
  39. },
  40. },
  41. },
  42. });
  43. console.log(response);

コンソール

  1. POST _search
  2. {
  3. "query": {
  4. "weighted_tokens": {
  5. "query_expansion_field": {
  6. "tokens": {"2161": 0.4679, "2621": 0.307, "2782": 0.1299, "2851": 0.1056, "3088": 0.3041, "3376": 0.1038, "3467": 0.4873, "3684": 0.8958, "4380": 0.334, "4542": 0.4636, "4633": 2.2805, "4785": 1.2628, "4860": 1.0655, "5133": 1.0709, "7139": 1.0016, "7224": 0.2486, "7387": 0.0985, "7394": 0.0542, "8915": 0.369, "9156": 2.8947, "10505": 0.2771, "11464": 0.3996, "13525": 0.0088, "14178": 0.8161, "16893": 0.1376, "17851": 1.5348, "19939": 0.6012},
  7. "pruning_config": {
  8. "tokens_freq_ratio_threshold": 5,
  9. "tokens_weight_threshold": 0.4,
  10. "only_score_pruned_tokens": false
  11. }
  12. }
  13. }
  14. }
  15. }

重み付きトークンのトップレベルパラメータ

  • <tokens>
  • (必須、辞書)トークン-重みペアの辞書。
    • pruning_config
    • (オプション、オブジェクト)オプションのプルーニング設定。これが有効な場合、クエリのパフォーマンスを向上させるために、重要でないトークンがクエリから省かれます。デフォルト:無効。
      1. - `````tokens_freq_ratio_threshold
      • (オプション、整数)指定されたフィールド内のすべてのトークンの平均頻度のtokens_freq_ratio_threshold倍を超える頻度のトークンは、外れ値と見なされ、プルーニングされます。この値は1から100の間でなければなりません。デフォルト:5
      • tokens_weight_threshold
      • (オプション、浮動小数点)重みがtokens_weight_threshold未満のトークンは重要でないと見なされ、プルーニングされます。この値は0から1の間でなければなりません。デフォルト:0.4
      • only_score_pruned_tokens
      • (オプション、ブール値)trueの場合、プルーニングされたトークンのみをスコアリングに入力し、非プルーニングトークンを破棄します。メインクエリにはfalseに設定することを強くお勧めしますが、より関連性の高い結果を得るために再スコアクエリにはtrueに設定できます。デフォルト:false
        tokens_freq_ratio_thresholdおよびtokens_weight_thresholdのデフォルト値は、最も最適な結果を提供するELSERを使用したテストに基づいて選択されました。

プルーニング設定と再スコアを使用した重み付きトークンクエリの例

以下の例は、text_expansionクエリにプルーニング設定を追加します。プルーニング設定は、クエリのパフォーマンスを向上させるために、クエリからプルーニングする重要でないトークンを特定します。

トークンプルーニングはシャードレベルで行われます。これにより、シャード全体で同じトークンが重要でないとラベル付けされるはずですが、各シャードの構成に基づいて保証されるものではありません。したがって、マルチシャードインデックスでtext_expansionpruning_configと共に実行している場合は、元々クエリからプルーニングされたトークンを使用して、再スコアフィルタリングされた検索結果機能を追加することを強くお勧めします。これにより、プルーニングされたトークンのシャードレベルの不整合を軽減し、全体的により良い関連性を提供します。

Python

  1. resp = client.search(
  2. index="my-index",
  3. query={
  4. "weighted_tokens": {
  5. "query_expansion_field": {
  6. "tokens": {
  7. "2161": 0.4679,
  8. "2621": 0.307,
  9. "2782": 0.1299,
  10. "2851": 0.1056,
  11. "3088": 0.3041,
  12. "3376": 0.1038,
  13. "3467": 0.4873,
  14. "3684": 0.8958,
  15. "4380": 0.334,
  16. "4542": 0.4636,
  17. "4633": 2.2805,
  18. "4785": 1.2628,
  19. "4860": 1.0655,
  20. "5133": 1.0709,
  21. "7139": 1.0016,
  22. "7224": 0.2486,
  23. "7387": 0.0985,
  24. "7394": 0.0542,
  25. "8915": 0.369,
  26. "9156": 2.8947,
  27. "10505": 0.2771,
  28. "11464": 0.3996,
  29. "13525": 0.0088,
  30. "14178": 0.8161,
  31. "16893": 0.1376,
  32. "17851": 1.5348,
  33. "19939": 0.6012
  34. },
  35. "pruning_config": {
  36. "tokens_freq_ratio_threshold": 5,
  37. "tokens_weight_threshold": 0.4,
  38. "only_score_pruned_tokens": False
  39. }
  40. }
  41. }
  42. },
  43. rescore={
  44. "window_size": 100,
  45. "query": {
  46. "rescore_query": {
  47. "weighted_tokens": {
  48. "query_expansion_field": {
  49. "tokens": {
  50. "2161": 0.4679,
  51. "2621": 0.307,
  52. "2782": 0.1299,
  53. "2851": 0.1056,
  54. "3088": 0.3041,
  55. "3376": 0.1038,
  56. "3467": 0.4873,
  57. "3684": 0.8958,
  58. "4380": 0.334,
  59. "4542": 0.4636,
  60. "4633": 2.2805,
  61. "4785": 1.2628,
  62. "4860": 1.0655,
  63. "5133": 1.0709,
  64. "7139": 1.0016,
  65. "7224": 0.2486,
  66. "7387": 0.0985,
  67. "7394": 0.0542,
  68. "8915": 0.369,
  69. "9156": 2.8947,
  70. "10505": 0.2771,
  71. "11464": 0.3996,
  72. "13525": 0.0088,
  73. "14178": 0.8161,
  74. "16893": 0.1376,
  75. "17851": 1.5348,
  76. "19939": 0.6012
  77. },
  78. "pruning_config": {
  79. "tokens_freq_ratio_threshold": 5,
  80. "tokens_weight_threshold": 0.4,
  81. "only_score_pruned_tokens": True
  82. }
  83. }
  84. }
  85. }
  86. }
  87. },
  88. )
  89. print(resp)

Ruby

  1. response = client.search(
  2. index: 'my-index',
  3. body: {
  4. query: {
  5. weighted_tokens: {
  6. query_expansion_field: {
  7. tokens: {
  8. "2161": 0.4679,
  9. "2621": 0.307,
  10. "2782": 0.1299,
  11. "2851": 0.1056,
  12. "3088": 0.3041,
  13. "3376": 0.1038,
  14. "3467": 0.4873,
  15. "3684": 0.8958,
  16. "4380": 0.334,
  17. "4542": 0.4636,
  18. "4633": 2.2805,
  19. "4785": 1.2628,
  20. "4860": 1.0655,
  21. "5133": 1.0709,
  22. "7139": 1.0016,
  23. "7224": 0.2486,
  24. "7387": 0.0985,
  25. "7394": 0.0542,
  26. "8915": 0.369,
  27. "9156": 2.8947,
  28. "10505": 0.2771,
  29. "11464": 0.3996,
  30. "13525": 0.0088,
  31. "14178": 0.8161,
  32. "16893": 0.1376,
  33. "17851": 1.5348,
  34. "19939": 0.6012
  35. },
  36. pruning_config: {
  37. tokens_freq_ratio_threshold: 5,
  38. tokens_weight_threshold: 0.4,
  39. only_score_pruned_tokens: false
  40. }
  41. }
  42. }
  43. },
  44. rescore: {
  45. window_size: 100,
  46. query: {
  47. rescore_query: {
  48. weighted_tokens: {
  49. query_expansion_field: {
  50. tokens: {
  51. "2161": 0.4679,
  52. "2621": 0.307,
  53. "2782": 0.1299,
  54. "2851": 0.1056,
  55. "3088": 0.3041,
  56. "3376": 0.1038,
  57. "3467": 0.4873,
  58. "3684": 0.8958,
  59. "4380": 0.334,
  60. "4542": 0.4636,
  61. "4633": 2.2805,
  62. "4785": 1.2628,
  63. "4860": 1.0655,
  64. "5133": 1.0709,
  65. "7139": 1.0016,
  66. "7224": 0.2486,
  67. "7387": 0.0985,
  68. "7394": 0.0542,
  69. "8915": 0.369,
  70. "9156": 2.8947,
  71. "10505": 0.2771,
  72. "11464": 0.3996,
  73. "13525": 0.0088,
  74. "14178": 0.8161,
  75. "16893": 0.1376,
  76. "17851": 1.5348,
  77. "19939": 0.6012
  78. },
  79. pruning_config: {
  80. tokens_freq_ratio_threshold: 5,
  81. tokens_weight_threshold: 0.4,
  82. only_score_pruned_tokens: true
  83. }
  84. }
  85. }
  86. }
  87. }
  88. }
  89. }
  90. )
  91. puts response

Js

  1. const response = await client.search({
  2. index: "my-index",
  3. query: {
  4. weighted_tokens: {
  5. query_expansion_field: {
  6. tokens: {
  7. "2161": 0.4679,
  8. "2621": 0.307,
  9. "2782": 0.1299,
  10. "2851": 0.1056,
  11. "3088": 0.3041,
  12. "3376": 0.1038,
  13. "3467": 0.4873,
  14. "3684": 0.8958,
  15. "4380": 0.334,
  16. "4542": 0.4636,
  17. "4633": 2.2805,
  18. "4785": 1.2628,
  19. "4860": 1.0655,
  20. "5133": 1.0709,
  21. "7139": 1.0016,
  22. "7224": 0.2486,
  23. "7387": 0.0985,
  24. "7394": 0.0542,
  25. "8915": 0.369,
  26. "9156": 2.8947,
  27. "10505": 0.2771,
  28. "11464": 0.3996,
  29. "13525": 0.0088,
  30. "14178": 0.8161,
  31. "16893": 0.1376,
  32. "17851": 1.5348,
  33. "19939": 0.6012,
  34. },
  35. pruning_config: {
  36. tokens_freq_ratio_threshold: 5,
  37. tokens_weight_threshold: 0.4,
  38. only_score_pruned_tokens: false,
  39. },
  40. },
  41. },
  42. },
  43. rescore: {
  44. window_size: 100,
  45. query: {
  46. rescore_query: {
  47. weighted_tokens: {
  48. query_expansion_field: {
  49. tokens: {
  50. "2161": 0.4679,
  51. "2621": 0.307,
  52. "2782": 0.1299,
  53. "2851": 0.1056,
  54. "3088": 0.3041,
  55. "3376": 0.1038,
  56. "3467": 0.4873,
  57. "3684": 0.8958,
  58. "4380": 0.334,
  59. "4542": 0.4636,
  60. "4633": 2.2805,
  61. "4785": 1.2628,
  62. "4860": 1.0655,
  63. "5133": 1.0709,
  64. "7139": 1.0016,
  65. "7224": 0.2486,
  66. "7387": 0.0985,
  67. "7394": 0.0542,
  68. "8915": 0.369,
  69. "9156": 2.8947,
  70. "10505": 0.2771,
  71. "11464": 0.3996,
  72. "13525": 0.0088,
  73. "14178": 0.8161,
  74. "16893": 0.1376,
  75. "17851": 1.5348,
  76. "19939": 0.6012,
  77. },
  78. pruning_config: {
  79. tokens_freq_ratio_threshold: 5,
  80. tokens_weight_threshold: 0.4,
  81. only_score_pruned_tokens: true,
  82. },
  83. },
  84. },
  85. },
  86. },
  87. },
  88. });
  89. console.log(response);

コンソール

  1. GET my-index/_search
  2. {
  3. "query":{
  4. "weighted_tokens": {
  5. "query_expansion_field": {
  6. "tokens": {"2161": 0.4679, "2621": 0.307, "2782": 0.1299, "2851": 0.1056, "3088": 0.3041, "3376": 0.1038, "3467": 0.4873, "3684": 0.8958, "4380": 0.334, "4542": 0.4636, "4633": 2.2805, "4785": 1.2628, "4860": 1.0655, "5133": 1.0709, "7139": 1.0016, "7224": 0.2486, "7387": 0.0985, "7394": 0.0542, "8915": 0.369, "9156": 2.8947, "10505": 0.2771, "11464": 0.3996, "13525": 0.0088, "14178": 0.8161, "16893": 0.1376, "17851": 1.5348, "19939": 0.6012},
  7. "pruning_config": {
  8. "tokens_freq_ratio_threshold": 5,
  9. "tokens_weight_threshold": 0.4,
  10. "only_score_pruned_tokens": false
  11. }
  12. }
  13. }
  14. },
  15. "rescore": {
  16. "window_size": 100,
  17. "query": {
  18. "rescore_query": {
  19. "weighted_tokens": {
  20. "query_expansion_field": {
  21. "tokens": {"2161": 0.4679, "2621": 0.307, "2782": 0.1299, "2851": 0.1056, "3088": 0.3041, "3376": 0.1038, "3467": 0.4873, "3684": 0.8958, "4380": 0.334, "4542": 0.4636, "4633": 2.2805, "4785": 1.2628, "4860": 1.0655, "5133": 1.0709, "7139": 1.0016, "7224": 0.2486, "7387": 0.0985, "7394": 0.0542, "8915": 0.369, "9156": 2.8947, "10505": 0.2771, "11464": 0.3996, "13525": 0.0088, "14178": 0.8161, "16893": 0.1376, "17851": 1.5348, "19939": 0.6012},
  22. "pruning_config": {
  23. "tokens_freq_ratio_threshold": 5,
  24. "tokens_weight_threshold": 0.4,
  25. "only_score_pruned_tokens": true
  26. }
  27. }
  28. }
  29. }
  30. }
  31. }
  32. }