如何解决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。基本上,您必须对 FieldBuilder
和 SearchClient
使用命名策略:
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 举报,一经查实,本站将立刻删除。