【发布时间】:2021-01-02 04:32:31
【问题描述】:
所以我有一个使用父/子结构构建的索引,如下所示:
{
"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
这按预期工作,并返回与此邮政编码匹配的记录列表,按指定排序。但是,当我尝试在 C# 中使用 Azure 搜索 SDK 执行此操作时,它会返回结果,但似乎没有应用 order by。如果我改用其中一个父字段(例如 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 没有问题。我真的不明白为什么这在代码中不起作用,但在门户网站上起作用?
【问题讨论】:
-
代码看起来不错。我在最后尝试过,排序对于复杂类型来说效果很好。请检查 SDK 版本,确保您使用的是最新版本。另外,您能否尝试捕获跟踪(您可以使用 Fiddler 或任何工具)。看看请求和解码的响应是怎样的。看看有没有区别。
-
谢谢,我已经意识到问题所在了。我使用的是针对 API 版本 2019-05-06 的 SDK 的 v10,但是在手动查询索引时,我使用的是 2020-06-30。刚刚发现在单独的 Nuget 包下有 SDK 的 v11 可用。
标签: c# azure azure-cognitive-search azure-search-.net-sdk