如何通过Azure AI Search向量索引API批量获取多向量独立相似结果
Azure AI Search多向量独立TopN查询方案
目前Azure AI Search的单个搜索请求无法直接返回多个独立目标向量各自的Top5相似结果——当你在vectorQueries中传入多个向量时,系统会合并所有向量的检索结果,按相似度排序后返回指定top数目的合并结果,而非拆分每个向量对应的独立结果。
如果希望通过单次请求实现需求,可行的替代方案是:
- 封装后端服务(比如Azure Functions、自定义Web API),由后端接收你的多向量请求后,并行调用Azure AI Search的单向量搜索API,将每个向量的Top5结果汇总后返回给客户端。这样客户端只需要发起一次请求到你的后端,后端处理多向量的并行查询逻辑。
以下是一个简单的Python Flask后端示例,用于封装多向量查询逻辑:
from flask import Flask, request, jsonify import requests import json from concurrent.futures import ThreadPoolExecutor app = Flask(__name__) # 替换为你的Azure AI Search配置 SEARCH_SERVICE_NAME = "your-search-service-name" INDEX_NAME = "your-index-name" API_VERSION = "2023-11-01" API_KEY = "your-admin-api-key" SEARCH_URL = f"https://{SEARCH_SERVICE_NAME}.search.windows.net/indexes/{INDEX_NAME}/docs/search?api-version={API_VERSION}" REQUEST_HEADERS = {'Content-Type': 'application/json', 'api-key': API_KEY} def query_single_vector(target_vector): """执行单个向量的相似性搜索""" payload = { "vectorQueries": [{ "kind": "vector", "fields": "embedding", "vector": target_vector }], "top": 5, } response = requests.post(SEARCH_URL, headers=REQUEST_HEADERS, data=json.dumps(payload)) return response.json() @app.route('/multi-vector-search', methods=['POST']) def multi_vector_search(): """接收多向量请求,返回每个向量的Top5结果""" request_data = request.get_json() target_vectors = request_data.get('target_vectors', []) # 并行处理多个向量查询 with ThreadPoolExecutor(max_workers=len(target_vectors)) as executor: results = list(executor.map(query_single_vector, target_vectors)) return jsonify(results) if __name__ == '__main__': app.run(host='0.0.0.0', port=5000)
除此之外,当前Azure AI Search的原生搜索API没有支持单次请求返回多向量独立结果的官方能力,你提到的客户端并行提交单向量查询是目前最直接的原生方案,若要简化客户端逻辑,建议通过后端封装实现。
内容的提问来源于stack exchange,提问作者IronsUp
相关产品推荐
相关产品推荐

