RRF — язык запросов в Cosmos DB (в Azure и Fabric)

Функция RRF возвращает сплавленную оценку путем объединения двух или более показателей, предоставляемых другими функциями.

Синтаксис

RRF(<function1>, <function2>, ..., <weights>)

Arguments

Description
function1 Функция оценки, например VectorDistance или FullTextScore.
function2 Функция оценки, например VectorDistance или FullTextScore.
weights Массив чисел, определяющий вес важности для каждой функции оценки.

Типы возвращаемых данных

Возвращает числовое значение, представляющее сплавленную оценку.

Примеры

В этом разделе содержатся примеры использования этой конструкции языка запросов.

Гибридный поиск (векторная сходство + BM25)

В этом примере гибридный поиск объединяет FullTextScore и VectorDistance.

SELECT TOP 10 *
FROM c
ORDER BY RANK RRF(FullTextScore(c.text, "keyword"), VectorDistance(c.vector, [1,2,3]))
[
  {
    "id": "doc-042",
    "text": "The keyword appears frequently in this document about distributed systems.",
    "vector": [0.12, 0.87, 0.34]
  },
  {
    "id": "doc-119",
    "text": "Another relevant document mentioning the keyword in context.",
    "vector": [0.45, 0.22, 0.91]
  }
]

В этом примере гибридный поиск использует весовые значения для функций оценки.

SELECT TOP 10 *
FROM c
ORDER BY RANK RRF(FullTextScore(c.text, "keyword"), VectorDistance(c.vector, [1,2,3]), [2,1])
[
  {
    "id": "doc-007",
    "text": "This document contains the keyword and is semantically close to the query vector.",
    "vector": [0.98, 0.11, 0.23]
  },
  {
    "id": "doc-355",
    "text": "A document with strong keyword relevance boosted by the higher weight.",
    "vector": [0.67, 0.44, 0.18]
  }
]

Fusion с двумя функциями FullTextScore

В этом примере два функции FullTextScore слиты.

SELECT TOP 10 *
FROM c
ORDER BY RANK RRF(FullTextScore(c.text, "keyword1"), FullTextScore(c.text, "keyword2"))
[
  {
    "id": "doc-201",
    "text": "This article discusses both keyword1 and keyword2 in the context of data engineering."
  },
  {
    "id": "doc-088",
    "text": "A comprehensive overview that mentions keyword1 and covers keyword2 in detail."
  }
]

Fusion с двумя функциями VectorDistance

В этом примере два функции VectorDistance слиты.

SELECT TOP 5 *
FROM c
ORDER BY RANK RRF(VectorDistance(c.vector1, [1,2,3]), VectorDistance(c.vector2, [2,2,4]))
[
  {
    "id": "doc-014",
    "vector1": [0.12, 0.87, 0.34],
    "vector2": [0.56, 0.78, 0.90]
  },
  {
    "id": "doc-092",
    "vector1": [0.45, 0.22, 0.91],
    "vector2": [0.33, 0.67, 0.45]
  }
]

Замечания

  • Для этой функции требуется регистрация в функции полнотекстового поиска NoSQL Azure Cosmos DB.
  • Для гибридного поиска также требуется регистрация в векторном поиске NoSQL в Azure Cosmos DB.
  • Для этой функции требуется полнотекстовый индекс.
  • Эта функция может использоваться только в ORDER BY RANK предложении и не может сочетаться с ORDER BY другими путями свойств.
  • Эта функция не может быть частью проекции (например, SELECT FullTextScore(c.text, "keyword") AS Score FROM c недопустимо).