Spec-Zone.ru › Elasticsearch 8
›Elasticsearch Guide [8.17] ›Query DSL ›Запросы к векторным данным

Запрос с весовыми токенами

Устарело в 8.15.0.

Этот запрос заменён запросом разряженных векторов и будет удалён в будущей версии.

Эта функциональность находится на стадии технического превью и может быть изменена или удалена в будущих версиях. Elastic будет работать над исправлением любых проблем, но функции в техническом превью не подпадают под SLA поддержки официальных функций GA.

Запрос с весовыми токенами требует списка пар «токен-вес», которые передаются в запросе, а не вычисляются с помощью модели обработки естественного языка. Эти пары токенов затем используются в запросе к полю разряженных векторов или ранжирования признаков.

Запросы с весовыми токенами полезны, когда требуется использовать внешнюю модель расширения запроса или быстро прототипировать изменения без повторной индексации новой модели.

Пример запроса

resp = client.search(
    query={
        "weighted_tokens": {
            "query_expansion_field": {
                "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
                },
                "pruning_config": {
                    "tokens_freq_ratio_threshold": 5,
                    "tokens_weight_threshold": 0.4,
                    "only_score_pruned_tokens": False
                }
            }
        }
    },
)
print(resp)
response = client.search(
  body: {
    query: {
      weighted_tokens: {
        query_expansion_field: {
          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
          },
          pruning_config: {
            tokens_freq_ratio_threshold: 5,
            tokens_weight_threshold: 0.4,
            only_score_pruned_tokens: false
          }
        }
      }
    }
  }
)
puts response
const response = await client.search({
  query: {
    weighted_tokens: {
      query_expansion_field: {
        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,
        },
        pruning_config: {
          tokens_freq_ratio_threshold: 5,
          tokens_weight_threshold: 0.4,
          only_score_pruned_tokens: false,
        },
      },
    },
  },
});
console.log(response);
POST _search
{
  "query": {
    "weighted_tokens": {
      "query_expansion_field": {
        "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},
        "pruning_config": {
          "tokens_freq_ratio_threshold": 5,
          "tokens_weight_threshold": 0.4,
          "only_score_pruned_tokens": false
        }
      }
    }
  }
}

Параметры верхнего уровня для weighted_token

<tokens>

(Обязательный, словарь) Словарь пар «токен-вес».

pruning_config

(Необязательный, объект) Необязательная конфигурация обрезки. Если включено, это позволит опустить незначащие токены из запроса, чтобы улучшить производительность запроса. По умолчанию: выключено.

Параметры для <pruning_config>:

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_expansion с pruning_config на индексе с несколькими фрагментами, мы настоятельно рекомендуем добавить функцию рескоринга отфильтрованных результатов поиска с токенами, которые изначально были обрезанны из запроса. Это поможет смягчить любые несоответствия на уровне фрагментов с обрезанными токенами и обеспечить более высокую релевантность в целом.

resp = client.search(
    index="my-index",
    query={
        "weighted_tokens": {
            "query_expansion_field": {
                "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
                },
                "pruning_config": {
                    "tokens_freq_ratio_threshold": 5,
                    "tokens_weight_threshold": 0.4,
                    "only_score_pruned_tokens": False
                }
            }
        }
    },
    rescore={
        "window_size": 100,
        "query": {
            "rescore_query": {
                "weighted_tokens": {
                    "query_expansion_field": {
                        "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
                        },
                        "pruning_config": {
                            "tokens_freq_ratio_threshold": 5,
                            "tokens_weight_threshold": 0.4,
                            "only_score_pruned_tokens": True
                        }
                    }
                }
            }
        }
    },
)
print(resp)
response = client.search(
  index: 'my-index',
  body: {
    query: {
      weighted_tokens: {
        query_expansion_field: {
          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
          },
          pruning_config: {
            tokens_freq_ratio_threshold: 5,
            tokens_weight_threshold: 0.4,
            only_score_pruned_tokens: false
          }
        }
      }
    },
    rescore: {
      window_size: 100,
      query: {
        rescore_query: {
          weighted_tokens: {
            query_expansion_field: {
              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
              },
              pruning_config: {
                tokens_freq_ratio_threshold: 5,
                tokens_weight_threshold: 0.4,
                only_score_pruned_tokens: true
              }
            }
          }
        }
      }
    }
  }
)
puts response
const response = await client.search({
  index: "my-index",
  query: {
    weighted_tokens: {
      query_expansion_field: {
        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,
        },
        pruning_config: {
          tokens_freq_ratio_threshold: 5,
          tokens_weight_threshold: 0.4,
          only_score_pruned_tokens: false,
        },
      },
    },
  },
  rescore: {
    window_size: 100,
    query: {
      rescore_query: {
        weighted_tokens: {
          query_expansion_field: {
            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,
            },
            pruning_config: {
              tokens_freq_ratio_threshold: 5,
              tokens_weight_threshold: 0.4,
              only_score_pruned_tokens: true,
            },
          },
        },
      },
    },
  },
});
console.log(response);
GET my-index/_search
{
   "query":{
      "weighted_tokens": {
      "query_expansion_field": {
        "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},
        "pruning_config": {
          "tokens_freq_ratio_threshold": 5,
          "tokens_weight_threshold": 0.4,
          "only_score_pruned_tokens": false
        }
      }
    }
   },
   "rescore": {
      "window_size": 100,
      "query": {
         "rescore_query": {
            "weighted_tokens": {
              "query_expansion_field": {
                "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},
                "pruning_config": {
                  "tokens_freq_ratio_threshold": 5,
                  "tokens_weight_threshold": 0.4,
                  "only_score_pruned_tokens": true
                }
              }
            }
         }
      }
   }
}

© 2023-2025 Elasticsearch
As of September 2024, Elasticsearch is available under a choice of three licenses: the Server Side Public License (SSPL), the Elastic License, or the AGPLv3 (OSI approved).
Elasticsearch and the Elasticsearch logo are trademarks of Elasticsearch B.V., registered in the U.S. and in other countries.
https://www.elastic.co/guide/en/elasticsearch/reference/8.17/query-dsl-weighted-tokens-query.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API