我有一个DTO,其属性类型为Dictionary<string, string>
。没有注释。当我上传DTO并致电indexClient.Documents.Index(batch)
时,我从服务中获得了以下错误消息:
请求无效。详细信息:参数:尝试读取属性“ Data”的内容时,已从JSON阅读器读取了类型为“ StartObject”的节点。但是,应该有一个“ StartArray”节点。
我发现避免出现这种情况的唯一方法是将其设置为null。这就是我创建索引的方式:
var fields = FieldBuilder.BuildForType<DTO>();
client.Indexes.Create(new Index
{
Name = indexName,
Fields = fields
});
如何索引我的字典?
答案 0 :(得分:0)
Azure认知搜索不支持行为类似于字典的宽松类型的属性包的字段。索引中的所有字段都必须具有定义明确的EDM type。
如果您在设计时不知道可能的字段集,则有几种选择,但是它们带有一些警告:
{
"id": "123",
"someOtherField": 3.5,
"dynamicStringFields": [
{
"name": "color",
"value": "blue"
}
]
}
方法1可能会碰到limit on the maximum number of fields per index。
方法2可能会碰到limit on the maximum number of elements across all complex collections per document。它还使查询模型复杂化,尤其是在您可能希望在查询中使用correlated语义的情况下。