Qdrant Filtering:must / should / must_not 全解析(含 Python 實操)

在向量搜索中,過濾(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;同…