检索器编辑

此功能处于技术预览阶段,可能会在将来的版本中更改或删除。语法可能会在 GA 之前发生变化。Elastic 将努力解决任何问题,但技术预览中的功能不受官方 GA 功能的支持 SLA 的约束。

检索器是描述从搜索返回的顶级文档的规范。检索器替换了 搜索 API 中其他返回顶级文档的元素,例如 queryknn。检索器可能具有子检索器,其中具有两个或多个子检索器的检索器被认为是复合检索器。这允许在树状结构(称为检索器树)中描述复杂的行为,以更好地阐明搜索期间发生的运算顺序。

有关检索器抽象的高级概述,请参阅 检索器

以下检索器可用

standard
一个 检索器,它替换了传统 查询 的功能。
knn
一个 检索器,它替换了 kNN 搜索 的功能。
rrf
一个 检索器,它从 互惠排名融合 (RRF) 生成顶级文档。

标准检索器编辑

标准检索器从传统的 查询 返回顶级文档。

参数:编辑

query

(可选,查询对象)

定义一个查询以检索一组顶级文档。

filter

(可选,查询对象或查询对象列表)

布尔查询过滤器 应用于此检索器,其中所有文档都必须匹配此查询,但不会影响得分。

search_after

(可选,搜索后对象)

定义用于分页的搜索后对象参数。

terminate_after

(可选,整数) 每个分片要收集的文档的最大数量。如果查询达到此限制,Elasticsearch 会提前终止查询。Elasticsearch 会在排序之前收集文档。

谨慎使用。Elasticsearch 将此参数应用于处理请求的每个分片。如果可能,让 Elasticsearch 自动执行提前终止。避免为针对跨多个数据层级具有后备索引的数据流的请求指定此参数。

sort

(可选,排序对象) 指定匹配文档顺序的排序对象。

min_score

(可选,float)

匹配文档的最低 _score。得分低于 _score 的文档不包含在顶级文档中。

collapse

(可选,折叠对象)

根据指定的键将顶级文档折叠成每个键一个顶级文档。

限制编辑

当检索器树包含复合检索器(具有两个或多个子检索器的检索器)时, 允许使用查询元素。

示例编辑

GET /index/_search
{
    "retriever": {
        "standard": {
            "query" { ... },
            "filter" { ... },
            "min_score": ...
        }
    },
    "size": ...
}

kNN 检索器编辑

kNN 检索器从 k 近邻搜索 (kNN) 返回顶级文档。

参数编辑

field

(必需,字符串)

要搜索的向量字段的名称。必须是 dense_vector 启用了索引的字段

query_vector

(如果未定义 query_vector_builder 则为必需,float 数组)

查询向量。必须与您要搜索的向量字段具有相同的维度数。必须是浮点数数组或十六进制编码的字节向量。

query_vector_builder

(如果未定义 query_vector 则为必需,查询向量构建器对象)

定义一个 模型 来构建查询向量。

k

(必需,整数)

要作为顶级匹配项返回的最近邻数量。此值必须小于或等于 num_candidates

num_candidates

(必需,整数)

每个分片要考虑的最近邻候选数量。需要大于 ksize(如果省略了 k),并且不能超过 10,000。Elasticsearch 会从每个分片收集 num_candidates 个结果,然后合并它们以找到前 k 个结果。增加 num_candidates 往往会提高最终 k 个结果的准确性。默认值为 Math.min(1.5 * k, 10_000)

filter

(可选,查询对象或查询对象列表)

用于过滤可以匹配的文档的查询。kNN 搜索将返回也匹配此过滤器的顶级 k 个文档。该值可以是单个查询或查询列表。如果未提供 filter,则允许所有文档匹配。

similarity

(可选,浮点数)

文档被视为匹配所需的最低相似度。计算的相似度值与使用的原始 similarity 相关。不是文档得分。然后根据 similarity 对匹配的文档进行评分,并应用提供的 boost

similarity 参数是直接向量相似度计算。

  • l2_norm:也称为欧几里得,将包括向量在以 query_vector 为原点、半径为 similaritydims 维超球体内的文档。
  • cosinedot_productmax_inner_product:仅返回余弦相似度或点积至少为提供的 similarity 的向量。

在此处了解更多信息:kNN 相似度搜索

限制编辑

参数 query_vectorquery_vector_builder 不能一起使用。

示例:编辑

GET /index/_search
{
    "retriever": {
        "knn": {
            "field": ...,
            "query_vector": ...,
            "k": ...,
            "num_candidates": ...
        }
    }
}

RRF 检索器编辑

一个 RRF 检索器根据 RRF 公式返回顶级文档,该公式对两个或多个子检索器进行同等加权。

参数编辑

retrievers

(必需,检索器对象数组)

一个子检索器列表,用于指定将对哪些返回的顶级文档集应用 RRF 公式。每个子检索器在 RRF 公式中具有同等权重。需要两个或多个子检索器。

rank_constant

(可选,整数)

此值决定每个查询的各个结果集中的文档对最终排名结果集的影响程度。较高的值表示排名较低的文档具有更大的影响力。此值必须大于或等于 1。默认值为 60

window_size

(可选,整数)

此值决定每个查询的各个结果集的大小。较高的值将提高结果相关性,但会降低性能。最终排名结果集将被修剪到搜索请求的 sizewindow_size 必须大于或等于 size 并且大于或等于 1。默认值为 size 参数。

限制编辑

RRF 检索器是复合检索器。子检索器可能无法使用受检索器树中包含复合检索器限制的元素。

示例编辑

GET /index/_search
{
    "retriever": {
        "rrf": {
            "retrievers": [
                {
                    "standard" { ... }
                },
                {
                    "knn": { ... }
                }
            ],
            "rank_constant": ...
            "window_size": ...
        }
    }
}

在检索器树中使用 fromsize编辑

fromsize 参数作为一般 搜索 API 的一部分在全局范围内提供。它们应用于检索器树中的所有检索器,除非特定检索器使用不同的参数(例如 window_size)覆盖 size 参数。但是,最终搜索匹配项始终限制为 size

在检索器树中使用聚合编辑

聚合 作为搜索请求的一部分在全局范围内指定。用于聚合的查询是所有叶检索器的组合,作为 布尔查询 中的 should 子句。

在指定检索器时对搜索参数的限制编辑

当检索器作为搜索的一部分指定时,以下元素不允许在顶层,而只能作为特定检索器的元素