【发布时间】:2020-05-13 14:32:02
【问题描述】:
我有一个索引定义,其中包括一个标记过滤器定义和一个相应的 custom 分析器定义,如下所示。
"suggesters": [],
"scoringProfiles": [],
"defaultScoringProfile": "",
"corsOptions": null,
"analyzers": [
{
"@odata.type": "#Microsoft.Azure.Search.CustomAnalyzer",
"name": "test_soundex",
"tokenizer": "standard_v2",
"tokenFilters": [
"lowercase",
"test_phonetic"
],
"charFilters": []
}
],
"charFilters": [],
"tokenFilters": [
{
"@odata.type": "#Microsoft.Azure.Search.PhoneticTokenFilter",
"name": "test_phonetic",
"encoder": "soundex",
"replace": false
}
],
"tokenizers": [],
当我尝试使用此定义创建新索引时,出现以下错误:
Microsoft.Rest.Azure.CloudException:请求无效。详细信息:索引:模型无法解析名为“分析器”的类型。当模型可用时,每个类型名称都必须解析为有效类型。
如果我从定义中删除分析器和 tokenFilters 元素,则创建索引没有问题。如果我删除自定义分析器定义,我会收到类似的错误“模型无法解析名为‘TokenFilter’的类型”。
我正在使用最新版本的 SDK (10.1.0)。
为了更清楚,这里是我用来创建索引的代码。我没有直接实例化分析器。它是在下面反序列化 Index 对象时创建的。
var text = System.IO.File.ReadAllText(@"index.json");
var indexDefinition = JsonConvert.DeserializeObject<Index>(text);
_searchServiceClient.Indexes.Create(indexDefinition);
我知道索引定义是有效的,因为当通过 Postman 使用 API 提交时,相同的 JSON 可以很好地创建索引。有什么想法吗?
【问题讨论】:
-
请分享您使用 SDK 的代码,以使问题尽可能有用。谢谢!
-
@Bruce Johnston 为了更清楚,这里是我用来创建索引的代码。我没有直接实例化分析器。它是在下面反序列化 Index 对象时创建的。 var text = System.IO.File.ReadAllText(@"index.json"); var indexDefinition = JsonConvert.DeserializeObject(文本); _searchServiceClient.Indexes.Create(indexDefinition);
-
感谢您的澄清。我已经相应地更新了我的答案。