You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Azure AI Search进行混合搜索时遇错误求助

混合搜索错误解决方案:"The 'search' parameter requires at least 1 searchable text field"

错误信息

"The 'search' parameter requires at least 1 searchable text field in the index.
Parameter name: searchFields"

问题原因

核心问题在于:Azure Cognitive Search 默认不会自动遍历**复杂字段(ComplexField)**内部的可搜索字段。你的索引里虽然在metadata下定义了多个SearchableField,但这些是嵌套字段,调用search方法时如果不明确指定,系统只会检查顶级字段——而你的顶级字段里,id是键字段(通常不用于全文搜索),vector是向量字段不属于文本可搜索类型,因此系统判定没有可用的搜索文本字段,抛出错误。

解决方案

方案1:显式指定搜索字段(推荐,无需修改索引结构)

在调用search方法时,通过searchFields参数明确指定要用于全文搜索的嵌套字段,路径格式为复杂字段名/内部字段名:

修改后的混合搜索代码:

def simple_hybrid_search():
    query = "classify earthworks"

    search_client = SearchClient(endpoint, index_name, AzureKeyCredential(key))
    vector_query = VectorizedQuery(vector=generate_embeddings(query), k_nearest_neighbors=3, fields="vector")

    results = search_client.search(
        search_text=query,
        vector_queries=[vector_query],
        select=["metadata"],
        # 显式指定所有需要用于全文搜索的嵌套字段
        searchFields="metadata/code,metadata/group,metadata/group_title,metadata/sub_group,metadata/sub_group_title,metadata/sub_object_title,metadata/title,metadata/object_title,metadata/classification_title"
    )

    for result in results:
        print(result)

方案2:调整索引结构(将文本字段设为顶级)

如果希望系统默认识别可搜索字段,可以把需要全文搜索的文本字段从metadata复杂字段中移出,设为顶级字段,比如:

修改后的索引字段定义:

fields = [
    SimpleField(name="id", type=SearchFieldDataType.String, key=True, searchable=True),
    SearchField(name="vector",type=SearchFieldDataType.Collection(SearchFieldDataType.Single), searchable=True, vector_search_dimensions=1536, vector_search_profile_name="uniclass-rag-vector-config",),
    # 原嵌套字段改为顶级字段
    SearchableField(name="code", type=SearchFieldDataType.String, nullable=True, searchable=True, filterable=True, sortable=True, facetable=True),
    SearchableField(name="group", type=SearchFieldDataType.String, nullable=True, searchable=True, filterable=True, sortable=True, facetable=True),
    SearchableField(name="group_title", type=SearchFieldDataType.String, nullable=True, searchable=True, filterable=True, sortable=True, facetable=True),
    SearchableField(name="sub_group", type=SearchFieldDataType.String, nullable=True, searchable=True, filterable=True, sortable=True, facetable=True), 
    SearchableField(name="sub_group_title", type=SearchFieldDataType.String, nullable=True, searchable=True, filterable=True, sortable=True, facetable=True),
    SearchableField(name="sub_object_title", type=SearchFieldDataType.String, nullable=True, searchable=True, filterable=True, sortable=True, facetable=True),
    SearchableField(name="title", type=SearchFieldDataType.String, nullable=True, searchable=True, filterable=True, sortable=True, facetable=True),
    SearchableField(name="object_title", type=SearchFieldDataType.String, nullable=True, searchable=True, filterable=True, sortable=True, facetable=True),
    SearchableField(name="classification_title", type=SearchFieldDataType.String, nullable=True, searchable=True, filterable=True, sortable=True, facetable=True),
    # 保留原metadata复杂字段(如果需要)
    ComplexField(name="metadata", fields=[
        # 可根据需求保留或调整内部字段
    ])
]

调整后重新创建索引,调用search时就不需要额外指定searchFields参数了。


内容的提问来源于stack exchange,提问作者ROAR.L

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 22:45:15