【问题标题】:Dynamic field mapping in Azure SearchAzure 搜索中的动态字段映射
【发布时间】:2019-12-08 05:22:24
【问题描述】:

我正在 Azure 搜索服务中创建一个索引,并寻找一种允许提交未知文件的方法。我的文档是半结构化的,这意味着我预先知道的领域很少。但我希望能够灵活地添加具有其他字段的文档。

例如:

{

    "name":"name1",
    "description":"description"
    "unknown,_simple":"test",
    "unknown_complex": [{
       "male":20,
       "female":30 
    }]
}

在上面的示例中,我知道名称和描述字段,因此它们被添加到具有正确映射的索引中。但是 unknow_simple 和 unknown_complex 类型是不知道的。用户可以在创建文档时提交这些。现在 Azure Search Rest API 抱怨以下错误消息

请求无效。详细信息:参数:没有 a 的资源 找到类型名称,但未指定预期类型。允许 没有类型信息的条目,预期的类型也必须是 指定模型时指定

我怎样才能做到这一点?谢谢你的帮助。

【问题讨论】:

    标签: azure azure-cognitive-search


    【解决方案1】:

    根据我的理解,您希望将索引设计为半结构化,“名称”和“描述”是两个固定字段并具有固定数据类型。将有两个灵活的字段,您不确定其数据类型。实际上,您可以将其数据类型定义为字符串。

    假设您想在该字段中存储一个 json 对象,只需对您的 json 对象进行字符串化,以便您可以在该字段中设置此字符串值。下次需要时将此值转换为 json。

    如果你想在你的动态字段中查询json对象的某个字段,你可以使用json字符串片段作为查询键来搜索,如下所示:

    让我们假设“描述”字段是我的动态字段,它的值是一个 json 字符串,我可以使用关键片段来获得我想要的结果。但它并不那么优雅。

    【讨论】:

    • 谢谢。如果我将 JSON 存储为字符串,我可以使用它们进行查询吗?例如,如果我想检查是否有一个名为“Suspended”的字段设置为 true/false,我可以在不获取所有文档并将其转换回 json 的情况下执行此操作吗?
    • 我想,我不能将这些字段与 $filter 之类的东西一起使用。它抱怨它找不到名称为“暂停”的属性。这是一个准确的假设吗?我会接受你的回答,因为你已经回答了我在最初的问题中提出的问题。谢谢。
    猜你喜欢
    • 2019-02-05
    • 2022-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-24
    • 2017-05-25
    • 2021-07-16
    • 1970-01-01
    相关资源
    最近更新 更多