Spec-Zone.ru › Elasticsearch 7
›Руководство по Elasticsearch [7.17] ›DSL запросов ›Специализированные запросы

Запрос с признаком ранжирования

Увеличивает релевантность документов на основе числового значения поля оценки релевантности типа rank_feature или rank_features.

Запрос rank_feature обычно используется в предложении should запроса bool, чтобы добавить его оценки релевантности к другим оценкам от запроса bool.

При установке параметра positive_score_impact на значение false для поля типа rank_feature или rank_features, рекомендуется, чтобы каждый документ, участвующий в запросе, имел значение для этого поля. В противном случае, если запрос rank_feature используется в предложении should, он не добавляет ничего к оценке документа с отсутствующим значением, но добавляет некоторый прирост для документа, содержащего признак. Это противоречит тому, что мы хотим – так как мы рассматриваем эти признаки негативно, мы хотим ранжировать документы, содержащие их, ниже, чем документы, в которых они отсутствуют.

В отличие от запроса function_score или других способов изменения оценок релевантности, запрос rank_feature эффективно пропускает неконкурентные совпадения, когда параметр track_total_hits не true. Это может существенно улучшить скорость запроса.

Функции признаков ранжирования

Для расчета оценок релевантности на основе полей признаков ранжирования, запрос rank_feature поддерживает следующие математические функции:

  • Насыщение
  • Логарифм
  • Сигмоида
  • Линейная

Если вы не знаете, с чего начать, рекомендуется использовать функцию saturation. Если функция не указана, запрос rank_feature по умолчанию использует функцию saturation.

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

Настройка индекса

Для использования запроса rank_feature, ваш индекс должен включать отображение поля типа rank_feature или rank_features. Чтобы увидеть, как можно настроить индекс для запроса rank_feature, попробуйте следующий пример.

Создайте индекс test со следующими отображениями полей:

  • pagerank, поле типа rank_feature, которое измеряет важность веб-сайта
  • url_length, поле типа rank_feature, которое содержит длину URL веб-сайта. В данном примере длинный URL коррелирует с отрицательной релевантностью, указанной значением positive_score_impact равным false.
  • topics, поле типа rank_features, которое содержит список тем и меру того, насколько хорошо каждый документ связан с данной темой
PUT /test
{
  "mappings": {
    "properties": {
      "pagerank": {
        "type": "rank_feature"
      },
      "url_length": {
        "type": "rank_feature",
        "positive_score_impact": false
      },
      "topics": {
        "type": "rank_features"
      }
    }
  }
}

Индексируйте несколько документов в индекс test.

PUT /test/_doc/1?refresh
{
  "url": "https://en.wikipedia.org/wiki/2016_Summer_Olympics",
  "content": "Rio 2016",
  "pagerank": 50.3,
  "url_length": 42,
  "topics": {
    "sports": 50,
    "brazil": 30
  }
}

PUT /test/_doc/2?refresh
{
  "url": "https://en.wikipedia.org/wiki/2016_Brazilian_Grand_Prix",
  "content": "Formula One motor race held on 13 November 2016",
  "pagerank": 50.3,
  "url_length": 47,
  "topics": {
    "sports": 35,
    "formula one": 65,
    "brazil": 20
  }
}

PUT /test/_doc/3?refresh
{
  "url": "https://en.wikipedia.org/wiki/Deadpool_(film)",
  "content": "Deadpool is a 2016 American superhero film",
  "pagerank": 50.3,
  "url_length": 37,
  "topics": {
    "movies": 60,
    "super hero": 65
  }
}

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

Следующий запрос ищет 2016 и повышает оценки релевантности на основе pagerank, url_length и темы sports.

GET /test/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "content": "2016"
          }
        }
      ],
      "should": [
        {
          "rank_feature": {
            "field": "pagerank"
          }
        },
        {
          "rank_feature": {
            "field": "url_length",
            "boost": 0.1
          }
        },
        {
          "rank_feature": {
            "field": "topics.sports",
            "boost": 0.4
          }
        }
      ]
    }
  }
}

Параметры верхнего уровня для запроса rank_feature

field
(Обязательно, строка) Поле типа rank_feature или rank_features, используемое для повышения оценок релевантности.
boost

(Необязательно, число с плавающей точкой) Вещественное число, используемое для уменьшения или увеличения оценок релевантности. По умолчанию 1.0.

Значения повышения относительны к значению по умолчанию для 1.0. Значение повышения между 0 и 1.0 уменьшает оценку релевантности. Значение больше 1.0 увеличивает оценку релевантности.

saturation

(Необязательно, объект функции насыщения) Функция насыщения, используемая для повышения оценок релевантности на основе значения признака ранжирования field. Если функция не указана, запрос rank_feature по умолчанию использует функцию saturation. Подробнее см. Насыщение.

Можно указать только одну функцию saturation, log, sigmoid или linear.

log

(Необязательно, объект функции логарифма) Логарифмическая функция, используемая для повышения оценок релевантности на основе значения признака ранжирования field. Подробнее см. Логарифм.

Можно указать только одну функцию saturation, log, sigmoid или linear.

sigmoid

(Необязательно, объект функции сигмоиды) Функция сигмоиды, используемая для повышения оценок релевантности на основе значения признака ранжирования field. Подробнее см. Сигмоида.

Можно указать только одну функцию saturation, log, sigmoid или linear.

linear

(Необязательно, объект функции линейной) Линейная функция, используемая для повышения оценок релевантности на основе значения признака ранжирования field. Подробнее см. Линейная.

Можно указать только одну функцию saturation, log, sigmoid или linear.

Примечания

Насыщение

Функция saturation выдает оценку, равную S / (S + pivot), где S — значение поля признака ранжирования, а pivot — настраиваемое опорное значение, так что результат будет меньше чем 0.5, если S меньше опорного, и больше чем 0.5 в противном случае. Оценки всегда (0,1).

Если признак ранжирования имеет отрицательное влияние на оценку, то функция будет вычисляться как pivot / (S + pivot), которая уменьшается по мере увеличения S.

GET /test/_search
{
  "query": {
    "rank_feature": {
      "field": "pagerank",
      "saturation": {
        "pivot": 8
      }
    }
  }
}

Если значение pivot не указано, Elasticsearch вычисляет значение по умолчанию, равное приближенному геометрическому среднему всех значений признака ранжирования в индексе. Рекомендуется использовать это значение по умолчанию, если у вас не было возможности обучить хорошее опорное значение.

GET /test/_search
{
  "query": {
    "rank_feature": {
      "field": "pagerank",
      "saturation": {}
    }
  }
}

Логарифм

Функция log выдает оценку, равную log(scaling_factor + S), где S — значение поля признака ранжирования, а scaling_factor — настраиваемый коэффициент масштабирования. Оценки не ограничены.

Эта функция поддерживает только признаки ранжирования, которые оказывают положительное влияние на оценку.

GET /test/_search
{
  "query": {
    "rank_feature": {
      "field": "pagerank",
      "log": {
        "scaling_factor": 4
      }
    }
  }
}

Сигмоида

Функция sigmoid является расширением функции saturation, которая добавляет настраиваемый показатель степени. Оценки вычисляются как S^exp^ / (S^exp^ + pivot^exp^). Как и для функции saturation, pivot — значение S, которое дает оценку 0.5, а оценки являются (0,1).

exponent должно быть положительным и обычно находится в [0.5, 1]. Хорошее значение должно быть получено посредством обучения. Если у вас нет такой возможности, мы рекомендуем использовать функцию saturation.

GET /test/_search
{
  "query": {
    "rank_feature": {
      "field": "pagerank",
      "sigmoid": {
        "pivot": 7,
        "exponent": 0.6
      }
    }
  }
}

Линейная

Функция linear — самая простая функция и выдает оценку, равную индексированному значению S, где S — значение поля признака ранжирования. Если поле признака ранжирования индексируется с "positive_score_impact": true, его индексированное значение равно S и округлено до сохранения только 9 значащих битов для точности. Если поле признака ранжирования индексируется с "positive_score_impact": false, его индексированное значение равно 1/S и округлено до сохранения только 9 значащих битов для точности.

GET /test/_search
{
  "query": {
    "rank_feature": {
      "field": "pagerank",
      "linear": {}
    }
  }
}

© 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/7.17/query-dsl-rank-feature-query.html

Spec-Zone.ru

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