詳細解釋
在向量搜索中,先根據結構化元數據(日期、類別、作者等)過濾,再在子集上進行語義搜索,提升準確率和效率。
典型應用:
- 時間範圍:「2023 年的報告」
- 類別:「僅技術文檔」
- 作者:「張三的郵件」
- 標籤:「#重要 且 #待處理」
- 權限:「我能訪問的文件」
實現方式:
- 預過濾:搜索前先篩選符合條件的文檔
- 後過濾:搜索後過濾結果(效率低)
- 混合索引:向量數據庫支持元數據索引(Pinecone、Milvus)
- 分區:按元數據預分區,只在相關分區搜索
技術挑戰:
- 複雜查詢:與邏輯(AND、OR、NOT)的組合
- 性能:大量過濾條件下的搜索效率
- 索引:元數據索引和向量索引的聯合優化
- 動態更新:元數據變化時的實時更新
向量數據庫支持:
- Pinecone:強大的元數據過濾
- Weaviate:GraphQL 風格的複雜查詢
- Milvus:布爾表達式過濾
- Elasticsearch:傳統過濾 + 向量搜索
最佳實踐:
- 索引策略:對常用過濾字段建立索引
- 組合順序:先過濾減少搜索空間
- 權限:提前過濾避免返回無權訪問的結果
- 預計算:靜態過濾條件可預分區
這是「企業級 RAG」的必備功能—— 數據總有結構化屬性,純向量搜索不夠。