【问题标题】:Microsoft.Azure.Search SearchServiceClient.Indexes.Create throws an exception "The request is invalid"Microsoft.Azure.Search SearchServiceClient.Indexes.Create 抛出异常“请求无效”
【发布时间】:2021-11-25 02:24:27
【问题描述】:

在 Microsoft Azure Search 上调用 Create 时,Search Service Client Indexes 会引发异常。 例外是:“请求无效”。 这是使用 .Net Core 3.1 的 C# 控制台应用程序。 网络上没有太多关于这个的讨论。 我做错了什么?

class Program
{
    private static readonly string searchServiceName = "mysearchservice";
    private static readonly string adminApiKey = "<<admin key here>>";
    static void Main(string[] args)
    {
        var serviceClient = CreateSearchServiceClient();
        CreateIndex(serviceClient);
    }

    private static void CreateIndex(SearchServiceClient ssc)
    {
        var definition = new Microsoft.Azure.Search.Models.Index()
        {
            Name = "hotels",
            Fields = FieldBuilder.BuildForType<Hotel>()
        };
        ssc.Indexes.Create(definition); // Throws
    }

    private static SearchServiceClient CreateSearchServiceClient()
    {
        SearchServiceClient serviceClient = 
           new SearchServiceClient(searchServiceName, 
             new SearchCredentials(adminApiKey));
        return serviceClient;
    }
}
 
public class Hotel 
{
    [System.ComponentModel.DataAnnotations.Key]
    [IsFilterable]
    public string HotelId { get; set; }

    [IsSearchable, IsSortable]
    public string HotelName { get; set; }

    [IsSearchable]
    [Analyzer(AnalyzerName.AsString.EnLucene)]
    public string Description { get; set; }

   
    [IsSearchable, IsFilterable, IsSortable, IsFacetable]
    public string Category { get; set; }

    [IsSearchable, IsFilterable, IsFacetable]
    public string[] Tags { get; set; }

    [IsSearchable, IsSortable, IsFacetable]
    public bool? ParkingIncluded { get; set; }


    public DateTimeOffset? LastRenovationDate { get; set; }

    [IsFilterable,IsSortable,IsFacetable]
    public double? Rating { get; set; }

    [IsFilterable, IsSortable]
    public GeographyPoint Location { get; set; }
}

【问题讨论】:

    标签: c# .net azure search


    【解决方案1】:

    我过去遇到过这个问题,它与 Json 序列化程序和 Geographypoint 有关。以下代码应该可以工作:

        Uri serviceEndpoint = new Uri($"https://{searchServiceName}.search.windows.net/");
    
        var adminClient = new SearchIndexClient(serviceEndpoint, new AzureKeyCredential(adminApiKey));
    
        JsonSerializerOptions serializerOptions = new JsonSerializerOptions
        {
            Converters =
            {
                new MicrosoftSpatialGeoJsonConverter()
            },
            PropertyNamingPolicy = JsonNamingPolicy.CamelCase
        };
        SearchClientOptions clientOptions = new SearchClientOptions
        {
            Serializer = new JsonObjectSerializer(serializerOptions)
        };
    
        FieldBuilder fieldBuilder = new FieldBuilder
        {
            Serializer = clientOptions.Serializer
        };
    
        var definition = new SearchIndex(indexName)
        {
            Fields = fieldBuilder.Build(typeof(Hotel))
        };
        adminClient.CreateOrUpdateIndex(definition);
    

    【讨论】:

      【解决方案2】:

      索引字段必须是字符串。当我将类型从int 更改为string 时,它成功了。在例外情况下,它说MoveNext 是指HttpRequest。正文只有一个元素,其中包含错误说明。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-09-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-11-07
        • 1970-01-01
        相关资源
        最近更新 更多