【问题标题】:Error Creating Index Using SDK When analyzers or tokenFilters Elements are Present存在分析器或 tokenFilters 元素时使用 SDK 创建索引时出错
【发布时间】: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);
  • 感谢您的澄清。我已经相应地更新了我的答案。

标签: azure-cognitive-search


【解决方案1】:

JSON 反序列化器需要实例化 CustomAnalyzer 而不是 AnalyzerAnalyzer 类应该是抽象的,但目前不是。除非您使用与 SDK 本身相同的 JSON 序列化程序设置,否则您将无法自行成功序列化和反序列化 SDK 模型类。这实际上不是一个受支持的场景——您也许可以让它工作,但这不是我们测试的东西。

对于那些可能会错误地手动实例化 Analyzer 的人来说,我们正在处理目前处于预览状态的 a new .NET SDK for Azure Cognitive Search。在新库中,Analyzer 已重命名为 LexicalAnalyzer,并且其构造函数不再可访问。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-02-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-16
    • 2016-09-25
    • 1970-01-01
    相关资源
    最近更新 更多