微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Azure 搜索 CreateIndexAsync 因 CamelCase 字段名称 FieldBuilder 失败

如何解决Azure 搜索 CreateIndexAsync 因 CamelCase 字段名称 FieldBuilder 失败

Azure 搜索 V11
我不能让它工作。但是使用标准 FieldBuilder 创建索引。

private static async Task CreateIndexAsync(SearchIndexClient indexClient,string indexName,Type type)
{
    var builder = new FieldBuilder
    {
        Serializer = new JsonObjectSerializer(new JsonSerializerOptions {PropertyNamingPolicy = new CamelCaseNamingPolicy()})
    };
    var searchFields = builder.Build(type).ToArray();
    var deFinition = new SearchIndex(indexName,searchFields);

    await indexClient.CreateIndexAsync(deFinition);
}

`

public class CamelCaseNamingPolicy : JsonNamingPolicy
{
     public override string ConvertName(string name)
     {
         return char.ToLower(name[0]) + name.Substring(1);
     }
}

解决方法

有关 FieldBuilder,请参阅 our sample。基本上,您必须对 FieldBuilderSearchClient 使用命名策略:

var clientOptions = new SearchClientOptions
{
  Serializer = new JsonObjectSerializer(
    new JsonSerializerOptions
    {
      PropertyNamingPolicy = JsonNamingPolicy.CamelCase,}),};

var builder = new FieldBuilder
{
  Serializer = clientOptions.Serializer,};

var index = new SearchIndex("name")
{
  Fields = builder.Build(type),};

var indexClient = new SearchIndexClient(uri,clientOptions);

await indexClient.CreateIndexAsync(index);
await Task.DelayAsync(5000); // can take a little while

var searchClient = new SearchClient(uri,clientOptions);
var response = await searchClient.SearchAsync("whatever");

虽然此示例有效(我们的示例代码来自经常执行的测试),但如果您还有其他问题,请务必发布您收到的确切异常消息。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。