文档中心>Elasticsearch Service>向量搜索指南>向量搜索>混合搜索(前置/后置/并行)

混合搜索(前置/后置/并行)

最近更新时间:2026-03-02 16:22:42

我的收藏
本文介绍 kNN 搜索的基本要点,您可以参阅此文档了解更多详情。
混合搜索结合了向量搜索和传统文本搜索的优势,可以根据业务场景灵活选择搭配,以提供符合业务召回需要的更精准的搜索结果。

前置过滤

搜索方式:在向量搜索之前应用过滤器,只对符合条件的文档进行向量相似度计算。
适用场景:适合有明确筛选条件的场景,例如书籍分类型、电商的品类过滤等。
GET book-index/_search
{
"knn":{
"field":"title_vector",
"query_vector": [0.1, 0.2, 0.3 ...],
"k":10,
"num_candidates": 100,
"filter":{ // 前置过滤条件
"term":{
"category": "历史"
}
}
}
}

后置过滤

搜索方式:先执行向量搜索,再对结果进行过滤。
适用场景:适合需要先进行泛化搜索,再过滤收敛的场景。
注意:后置过滤可能过滤掉大量结果,导致最终返回文档不足,因此建议设置较大的 k 值来保证足够的结果返回。
说明:如下代码示例中,filter子句无论放在must前面还是后面,执行效果都一样,都是后置过滤。
GET book-index/_search
{
"query":{
"bool":{
"must":[
{
"knn":{
"field":"content_vector",
"query_vector": [0.1, 0.2, 0.3 ...],
"k":100,
"num_candidates": 500
}
}
],
"filter":[ // 后置过滤,filter子句无论放在前面还是后面,执行效果都一样。
{
"range": {
"price": {
"gte": 15,
"lte": 25
}
}
}
]
}
},
"size": 10
}


并行搜索

搜索方式:向量搜索和文本搜索并行执行,结果按分数合并,可通过 boost 调整权重。
适用场景:适合语义相似度和关键词匹配并重的场景。
GET book-index/_search
{
"query":{
"bool":{
"should":[
{
"range": {
"price": {
"gte": 15,
"lte": 25
}
}
},
{
"knn":{
"field":"title_vector",
"query_vector": [0.1, 0.2, 0.3 ...],
"k":2,
"num_candidates": 50
}
}
]
}
}
}