在向量搜索中,过滤(Filtering) 是保证结果精准性和业务契合度的关键手段。

Qdrant 的过滤机制不仅能在向量相似度检索的基础上叠加结构化条件,还提供了灵活的布尔逻辑组合,让我们可以像写数据库查询一样,精准控制搜索范围。

本文将深入解析 Qdrant 的过滤规则,并结合 Python 实例演示 must、should、must_not 的用法。


1. 过滤机制的意义

向量检索只考虑语义相似度,但在实际业务中往往需要额外的约束:

  • 电商:只展示“价格低于 1000 元”的笔记本

  • 招聘:只匹配“3 年以上经验”的候选人

  • 地图搜索:只返回“当前城市”的餐厅

Qdrant 的 Filtering 就是为这些结构化条件而生的。


2. 三大核心关键字

2.1 must — 必须满足的条件(AND)

  • 定义:列表中的所有条件都必须成立。

  • 逻辑:等价于 AND。

JSON 示例:

"filter": {"must": [{ "key": "city", "match": { "value": "London" } },{ "key": "price", "range": { "lte": 1000 } },{ "key": "brand", "match": { "value": "Apple" } }]
}

解释:只返回满足

city = London 且 price ≤ 1000 且 brand = Apple 的结果。

Python 实操:

from qdrant_client import QdrantClient
from qdrant_client.models import Filter, FieldCondition, MatchValue, Rangeclient = QdrantClient("localhost", port=6333)search_result = client.search(collection_name="products",query_vector=[0.1, 0.2, 0.3, 0.4],limit=5,query_filter=Filter(must=[FieldCondition(key="city", match=MatchValue(value="London")),FieldCondition(key="price", range=Range(lte=1000)),FieldCondition(key="brand", match=MatchValue(value="Apple"))])
)print(search_result)

2.2 should — 可选条件(OR / 排序加权)

  • 定义:

    • 有 must 时:should 条件不满足也会返回,但满足的结果会排前。

    • 无 must 时:should 至少要有一个条件成立(OR 逻辑)。

JSON 示例:must + should

"filter": {"must": [{ "key": "city", "match": { "value": "London" } }],"should": [{ "key": "brand", "match": { "value": "Apple" } }]
}

解释:必须在伦敦;Apple 品牌排前,不是 Apple 也会返回。

Python 实操:

from qdrant_client.models import ShouldConditionsearch_result = client.search(collection_name="products",query_vector=[0.1, 0.2, 0.3, 0.4],limit=5,query_filter=Filter(must=[FieldCondition(key="city", match=MatchValue(value="London"))],should=[FieldCondition(key="brand", match=MatchValue(value="Apple"))])
)

2.3 must_not — 排除条件(NOT)

  • 定义:列表中的条件必须全部不成立。

  • 逻辑:等价于 NOT。

JSON 示例:

"filter": {"must_not": [{ "key": "brand", "match": { "value": "Asus" } }]
}

解释:排除 Asus 品牌。

Python 实操:

search_result = client.search(collection_name="products",query_vector=[0.1, 0.2, 0.3, 0.4],limit=5,query_filter=Filter(must_not=[FieldCondition(key="brand", match=MatchValue(value="Asus"))])
)


3. min_should 高级用法

min_should 可要求 should 中必须满足最少数量。

JSON 示例:至少满足 2 个特性

"filter": {"should": [{ "key": "feature", "match": { "value": "touchscreen" } },{ "key": "feature", "match": { "value": "ssd" } },{ "key": "feature", "match": { "value": "backlit_keyboard" } }],"min_should": {"min_count": 2}
}

Python 实操:

from qdrant_client.models import Filter, FieldCondition, MatchValue, MinShouldsearch_result = client.search(collection_name="products",query_vector=[0.1, 0.2, 0.3, 0.4],limit=5,query_filter=Filter(should=[FieldCondition(key="feature", match=MatchValue(value="touchscreen")),FieldCondition(key="feature", match=MatchValue(value="ssd")),FieldCondition(key="feature", match=MatchValue(value="backlit_keyboard"))],min_should=MinShould(min_count=2))
)

4. 总结

  • must = 全部必须成立(AND)

  • should = 无 must 时是 OR;有 must 时影响排序

  • must_not = 必须全部不成立(NOT)

  • min_should = 要求 should 中命中的最小数量

在实际业务中,可以先用简单的 must / should / must_not 组合调试逻辑,再引入嵌套和 min_should 做更复杂的检索策略。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/918203.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/918203.shtml
英文地址,请注明出处:http://en.pswp.cn/news/918203.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

五、RuoYi-Cloud-Plus 前端项目部署以及如何改后端请求地址。

1.前情描述 前面的文章我们介绍了RuoYi-Cloud-Plus的nocos的配置内容,已经启动其他服务要注意什么东西。 专栏内容在这,感兴趣可以看看。 https://blog.csdn.net/weixin_42868605/category_13023920.html 2.前端项目部署。 官网地址:plus…

工作量评估

工作量评估 API 工作量评估: 得分 入参个数 * 0.2 业务规则 * 0.5 改动的库表个数 * 0.3 得分(1-2):简单API-5人天 得分(3-8):中等API-8人天 得分(8-15):复…

篮球运动(动态规划)

题目描述小明建造了一个篮球场,他请来了2行n列的人,想让他们进行比赛。每一个人都有一个能力值,第一行分别为h11,h12,…,h1n,第二行为h21,h22,…,h2n。现在小…

区块链与大数据分析技术深度解析

目录 区块链与大数据分析技术深度解析 1. 引言:当区块链遇见大数据 2. 区块链数据特性 2.1 数据结构差异 2.2 区块链数据层级 3. 数据获取技术 3.1 节点直连方案 3.2 链上数据湖架构 4. 数据分析关键技术 4.1 交易图谱分析 4.2 地址聚类算法 5. 链上分析应用场景 5.1 反洗钱(A…

网络基础——网络层级

OSI七层模型OSI七层模型名称功能协议应用层直接为用户应用程序(如浏览器、邮件客户端)提供网络服务接口。HTTP/HTTPS(网页浏览)FTP(文件传输)SMTP/POP3(邮件)DNS(域名解析…

【Redis】hash哈希,List列表

目录 一. hash哈希 1.1.常用命令 1.1.1.HSET 1.1.2.HGET 1.1.3.HEXISTS 1.1.4.HDEL 1.1.5.HKEYS 1.1.6.HVALS 1.1.7.HGETALL 1.1.8.HMGET 1.1.9.HLEN 1.1.10.HSETNX 1.1.11.HINCRBY 1.1.12.HINCRBYFLOAT 1.2. 内部编码 1.3. 使用场景 1.4…

MySQL相关概念和易错知识点(4)(分组查询、连接查询、合并查询、子查询)

目录1.分组查询(1)聚合函数(2)group by子句(3)having2.连接查询(1)内连接(笛卡尔积)(2)外连接(3)内外连接的区…

【Python 高频 API 速学 ①】

一、为什么先学它们? 在真实代码里,90 % 的 bug 都源于「拿到的是 A 类型,却当成 B 类型用」。 把「不确定」变成「确定」——这就是类型转换三兄弟的核心价值。二、三兄弟速览函数一句话定位常见输入失败会怎样int(x)把 x 变成整数‘42’, 3…

FFmpeg 视频旋转信息处理:3.4 vs 7.0.2

1. 概述 FFmpeg 在处理视频旋转信息方面经历了重要的架构变化。本文档详细对比了 FFmpeg 3.4 和 7.0.2 在封装(muxing)和解封装(demuxing)视频旋转信息时的差异,并提供兼容性解决方案。文档内容由Claude Sonnet 4辅助撰…

《Resolving tissue complexity by multimodal spatial omics modeling with MISO》

概念多模态空间组学:简单来说,就是同时研究生物组织里的多种分子信息(比如基因表达、蛋白质、代谢物、表观遗传标记等),而且这些信息还带有空间位置。MISO(MultI-modal Spatial Omics)是这篇论文…

三阶段提交(3PC)协议的全面解析:理论、机制与实践局限性

第一部分:非阻塞提交的起源:从两阶段提交(2PC)的缺陷到三阶段提交(3PC)的构想在分布式计算领域,确保跨多个独立节点执行的事务的完整性是一项至关重要的挑战。这些节点或站点可能在地理上分散&a…

衰减器的计算

pi型衰减器,如下图所示。 它适用于输入输出阻抗匹配的情况下,还能进行衰减。 不过当输入输出阻抗不匹配时,2个R1也会不相等。 已知特性阻抗Z0,衰减比AVin/Vout,怎么计算R1、R2? 1、电阻分压。 Vout Vi…

Day02 员工管理,分类管理

新增员工需求分析和设计产品原型:接口设计:本项目约定:管理端发出的请求,统一使用 /admin 作为前缀用户端发出的请求,统一使用 /user 作为前缀数据库表设计:代码开发根据新增员工接口设计对应的 DTO&#x…

[SC]SystemC 常见的编译/语法错误与解法(三)

SystemC 常见的编译/语法错误与解法(三) 摘要:下面按“现象/编译信息 → 成因 → 解决方案”的结构,归纳 SystemC 建模在 SoC 验证中常见的“编译期/语法层面”问题,并补充如何根据编译信息快速定位与如何在流程上避免这些问题。 一、SystemC 常见的编译/语法错误与…

06-docker容器常用命令

文章目录一.docker容器相关指令概述二.生产环境中常用的 docker容器相关指令1.创建容器(create)2.查看已创建的容器(ps,ls,list)3.运行一个已创建的容器(start)4.停止一个正在运行的容器(stop)5.重启容器(restart)6.创建并启动一个容器(run,等…

Xiphos Q8 摄像头板 高性能图像处理板

我们的高性能图像处理板设计用于与具有两个 Camera Link 接口(2x Base 或 1x Medium)的 Q8 混合处理器卡配合使用。接口: 2个Camera Link接口 4个SpaceWire接口 4个USB 2.0主端口 串行接口和 GPIO 多个 Vcc 输出(5.0、3.3 和 1.8V…

Rocky Linux 10 搭建 NFS 服务详细步骤

1.NFS描述 NFS,全称为Network File System,即网络文件系统,是一种分布式文件系统协议,允许一个系统在网络上与他人共享目录和文件。通过NFS,用户和程序可以像访问本地文件一样访问远端系统上的文件。以下是NFS的一些主…

Android MediaMetadataRetriever取视频封面,Kotlin(1)

Android MediaMetadataRetriever取视频封面&#xff0c;Kotlin&#xff08;1&#xff09; <uses-permission android:name"android.permission.WRITE_EXTERNAL_STORAGE" /><uses-permission android:name"android.permission.READ_EXTERNAL_STORAGE&qu…

qt的元对象系统详解

Qt 的元对象系统&#xff08;Meta-Object System&#xff09;&#xff0c;这是 Qt 框架最核心、最强大的特性之一。 1.什么是 Qt 的元对象系统&#xff1f; Qt 的元对象系统&#xff08;Meta-Object System&#xff09;是 Qt 在标准 C 基础上扩展的一套机制&#xff0c;它为 C …

Nginx 性能优化与动态内容处理

一、压缩功能 实验目的&#xff1a;通过启用 Nginx 的 Gzip 压缩功能&#xff0c;对传输的文件&#xff08;如 HTML、日志等&#xff09;进行压缩&#xff0c;减少网络传输数据量&#xff0c;提升用户访问速度&#xff08;尤其适用于带宽有限的场景&#xff09;&#xff0c;同…