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

在Azure Search .NET SDK中按复杂类型排序?

如何解决在Azure Search .NET SDK中按复杂类型排序?

所以我有一个使用父/子结构构建的索引,如下所示:

    {
            "Id": "13704","StreetNumber": "29","StreetName": "Fiction Road","PostalCode": "DD1 G33"
            "CityName": "Fiction City","Property": {
                "ID": 13592,"ParentPropertyID": 123
            }
    }

我想按Property / ParentPropertyID进行订购,该ID在Azure门户上使用以下查询字符串可以正常工作:

search=DD1 G33&searchmode=all&$orderby=Property/ParentPropertyID asc

这可以按预期工作,并向我返回与按指定顺序排序的邮政编码匹配的记录列表。但是,当我尝试使用Azure搜索SDK在C#中执行此操作时,它返回结果,但似乎不应用该顺序。如果我改用父字段之一(例如StreetNumber),它确实可以工作,因此似乎仅限于复杂类型。代码

            SearchParameters parameters;
            DocumentSearchResult<TempAddress> results;

            parameters =
                new SearchParameters()
                {
                    SearchMode = SearchMode.All,OrderBy = new[] { "Property/ParentPropertyID asc" }
                };

            results = _searchIndexClient.Documents.Search<TempAddress>("DD1 G33",parameters);

结果对象返回正确结果的列表,但尚未应用OrderBy。似乎发现该字段没有任何问题,因为它不会引发任何错误。我似乎真的找不到任何复杂类型排序的示例,或者任何涉及复杂类型的示例都使用与我上面使用的语法相同的语法(即ParentProp / ChildProp)。如果我改变

OrderBy = new[] { "Property/ParentPropertyID asc" }

收件人:

OrderBy = new[] { "StreetNumber desc" }

OrderBy可以正常工作。我真的看不到为什么这在代码中不起作用,但是可以在门户网站上起作用吗?

解决方法

多亏了sathya_vijayakumar-MSFT,我知道了问题所在,并在其他人遇到相同问题的情况下发布了答案。我使用的是Microsoft.Azure.Search Nuget软件包,该软件包仅适用于版本10,但版本10针对2019-05-06搜索API,该API似乎不支持按复杂类型进行排序。如果我使用2020-06-30 API手动进行查询,则可以正常工作。使用2019-05-06版本的相同手动查询不起作用!

事实证明,可以针对该API版本使用SDK的版本11,但该版本位于另一个NuGet包下:Azure.Search.Documents,与原始包相比,是一个重大突破(请参阅https://docs.microsoft.com/en-us/azure/search/search-dotnet-sdk-migration-version-11)。

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