在 Azure Search .NET SDK 中按复杂类型排序?
Ordering by complex types in Azure Search .NET SDK?
所以我有一个使用 parent/child 结构构建的索引,如下所示:
{
"Id": "13704",
"StreetNumber": "29",
"StreetName": "Fiction Road",
"PostalCode": "DD1 G33"
"CityName": "Fiction City",
"Property": {
"ID": 13592,
"ParentPropertyID": 123
}
}
我想按 Property/ParentPropertyID 订购,它在 Azure 门户上使用以下查询字符串运行良好:
search=DD1 G33&searchmode=all&$orderby=Property/ParentPropertyID asc
这按预期工作,并且 returns 我按指定顺序与此邮政编码匹配的记录列表。但是,当我尝试使用 Azure 搜索 SDK 在 C# 中执行此操作时,结果 returns 但似乎并未应用排序依据。如果我改为使用其中一个父字段(例如 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);
结果对象 returns 正确结果的列表,但尚未应用 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,它似乎不支持按复杂类型排序。如果我自己使用 2020-06-30 API 手动进行查询,它工作正常。同样使用2019-05-06版本手动查询无效!
事实证明,SDK 版本 11 可用于此 API 版本,但它位于不同的 NuGet 包中:Azure.Search.Documents 这是对原始包的一个公平的破坏性更改(请参阅 https://docs.microsoft.com/en-us/azure/search/search-dotnet-sdk-migration-version-11).
所以我有一个使用 parent/child 结构构建的索引,如下所示:
{
"Id": "13704",
"StreetNumber": "29",
"StreetName": "Fiction Road",
"PostalCode": "DD1 G33"
"CityName": "Fiction City",
"Property": {
"ID": 13592,
"ParentPropertyID": 123
}
}
我想按 Property/ParentPropertyID 订购,它在 Azure 门户上使用以下查询字符串运行良好:
search=DD1 G33&searchmode=all&$orderby=Property/ParentPropertyID asc
这按预期工作,并且 returns 我按指定顺序与此邮政编码匹配的记录列表。但是,当我尝试使用 Azure 搜索 SDK 在 C# 中执行此操作时,结果 returns 但似乎并未应用排序依据。如果我改为使用其中一个父字段(例如 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);
结果对象 returns 正确结果的列表,但尚未应用 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,它似乎不支持按复杂类型排序。如果我自己使用 2020-06-30 API 手动进行查询,它工作正常。同样使用2019-05-06版本手动查询无效!
事实证明,SDK 版本 11 可用于此 API 版本,但它位于不同的 NuGet 包中:Azure.Search.Documents 这是对原始包的一个公平的破坏性更改(请参阅 https://docs.microsoft.com/en-us/azure/search/search-dotnet-sdk-migration-version-11).