已生成向量索引后,如何用Python在Azure AI Search执行向量/混合搜索?
向量搜索与混合搜索实现步骤
前提准备
确保已安装必要的Python包:
pip install azure-search-documents azure-ai-openai python-dotenv
1. 向量搜索实现
向量搜索需要先将用户输入的文本转换为对应向量,再基于该向量在索引中匹配相似内容。
完整代码示例
from azure.core.credentials import AzureKeyCredential from azure.search.documents import SearchClient from azure.ai.openai import OpenAIClient # 配置参数(替换为你的实际值) SEARCH_ENDPOINT = "你的Azure AI Search端点" SEARCH_KEY = "你的Azure AI Search密钥" INDEX_NAME = "你的向量索引名称" OPENAI_ENDPOINT = "你的Azure OpenAI端点" OPENAI_KEY = "你的Azure OpenAI密钥" EMBEDDING_MODEL_NAME = "你的嵌入模型名称(如text-embedding-ada-002)" VECTOR_FIELD_NAME = "你的索引中的向量字段名(如content_vector)" # 初始化客户端 search_credential = AzureKeyCredential(SEARCH_KEY) search_client = SearchClient( endpoint=SEARCH_ENDPOINT, index_name=INDEX_NAME, credential=search_credential ) openai_credential = AzureKeyCredential(OPENAI_KEY) openai_client = OpenAIClient( endpoint=OPENAI_ENDPOINT, credential=openai_credential ) # 获取用户查询并生成向量 text = input("Qes: ") response = openai_client.embeddings.create( input=text, model=EMBEDDING_MODEL_NAME ) query_vector = response.data[0].embedding # 执行向量搜索 results = search_client.search( search_text=None, # 向量搜索时无需关键词文本 vector=query_vector, vector_fields=VECTOR_FIELD_NAME, select="title", top=5 # 返回前5条最相似结果 ) # 输出结果 for ans in results: print(f"标题: {ans['title']}, 相似度评分: {ans['@search.score']}")
2. 混合搜索实现
混合搜索会同时结合关键词匹配和向量相似性匹配,返回综合评分最高的结果,适合同时需要精准关键词和语义相似的场景。
完整代码示例
只需修改搜索部分的代码,其余配置与向量搜索一致:
# 执行混合搜索 results = search_client.search( search_text=text, # 保留关键词查询 vector=query_vector, vector_fields=VECTOR_FIELD_NAME, select="title", top=5 ) # 输出结果 for ans in results: print(f"标题: {ans['title']}, 综合评分: {ans['@search.score']}")
注意事项
- 确保
VECTOR_FIELD_NAME与你在Azure AI Search索引中定义的向量字段名称完全一致(可在索引的"字段"页签查看)。 - 嵌入模型需与你导入数据时使用的模型保持一致,否则向量无法匹配。
- 可通过调整
top参数控制返回结果的数量,通过filter参数添加过滤条件进一步缩小范围。
内容的提问来源于stack exchange,提问作者alice
相关产品推荐
相关产品推荐

