检索器
编辑检索器编辑
此功能处于技术预览阶段,可能会在将来的版本中更改或删除。语法可能会在 GA 之前发生变化。Elastic 将努力解决任何问题,但技术预览中的功能不受官方 GA 功能的支持 SLA 的约束。
检索器是描述从搜索返回的顶级文档的规范。检索器替换了 搜索 API 中其他返回顶级文档的元素,例如 query
和 knn
。检索器可能具有子检索器,其中具有两个或多个子检索器的检索器被认为是复合检索器。这允许在树状结构(称为检索器树)中描述复杂的行为,以更好地阐明搜索期间发生的运算顺序。
有关检索器抽象的高级概述,请参阅 检索器。
以下检索器可用
标准检索器编辑
标准检索器从传统的 查询 返回顶级文档。
参数:编辑
-
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
-
(必需,整数)
每个分片要考虑的最近邻候选数量。需要大于
k
或size
(如果省略了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
为原点、半径为similarity
的dims
维超球体内的文档。 -
cosine
、dot_product
和max_inner_product
:仅返回余弦相似度或点积至少为提供的similarity
的向量。
在此处了解更多信息:kNN 相似度搜索
-
限制编辑
参数 query_vector
和 query_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
-
(可选,整数)
此值决定每个查询的各个结果集的大小。较高的值将提高结果相关性,但会降低性能。最终排名结果集将被修剪到搜索请求的 size。
window_size
必须大于或等于size
并且大于或等于1
。默认值为size
参数。
限制编辑
RRF 检索器是复合检索器。子检索器可能无法使用受检索器树中包含复合检索器限制的元素。
示例编辑
GET /index/_search { "retriever": { "rrf": { "retrievers": [ { "standard" { ... } }, { "knn": { ... } } ], "rank_constant": ... "window_size": ... } } }
在检索器树中使用 from
和 size
编辑
from
和 size
参数作为一般 搜索 API 的一部分在全局范围内提供。它们应用于检索器树中的所有检索器,除非特定检索器使用不同的参数(例如 window_size
)覆盖 size
参数。但是,最终搜索匹配项始终限制为 size
。
在指定检索器时对搜索参数的限制编辑
当检索器作为搜索的一部分指定时,以下元素不允许在顶层,而只能作为特定检索器的元素