我有一个具有 type 属性的 DTODictionary<string, string>
。它没有注释。当我上传 DTO 并致电indexClient.Documents.Index(batch)
,我从服务中收到此错误:
请求无效。详细信息:参数:尝试读取属性“Data”的内容时,从 JSON 读取器读取类型为“StartObject”的节点;但是,需要一个“StartArray”节点。
我发现避免它的唯一方法是将其设置为空。这就是我创建索引的方式:
var fields = FieldBuilder.BuildForType<DTO>();
client.Indexes.Create(new Index
{
Name = indexName,
Fields = fields
});
如何为我的词典建立索引?
Azure 认知搜索不支持行为类似于松散类型属性包(例如字典)的字段。索引中的所有字段都必须有明确定义的EDM type https://learn.microsoft.com/rest/api/searchservice/supported-data-types.
如果您在设计时不知道可能的字段集,您有几个选择,但它们有很大的警告:
- 在应用程序代码中,在索引文档时发现新字段时,将其添加到索引定义中。更新索引会增加整个写入路径的延迟,因此根据添加新字段的频率,这可能可行也可能不可行。
- 将“动态”字段建模为一组名称/值集合字段,每个字段对应一种所需的数据类型。例如,如果发现新的字符串字段“color”的值为“blue”,则您上传的文档可能如下所示:
{
"id": "123",
"someOtherField": 3.5,
"dynamicStringFields": [
{
"name": "color",
"value": "blue"
}
]
}
方法#1 可能会遇到每个索引的最大字段数限制 https://learn.microsoft.com/azure/search/search-limits-quotas-capacity#index-limits.
方法 2 可能会遇到以下问题:每个文档的所有复杂集合的最大元素数量限制 https://learn.microsoft.com/azure/search/search-limits-quotas-capacity#index-limits。它还使查询模型变得复杂,特别是对于您可能想要的情况相关的 https://learn.microsoft.com/azure/search/search-query-understand-collection-filters#correlated-versus-uncorrelated-search查询中的语义。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)