c# - 使用 Azure 搜索服务获取距离
问题描述
我有一个这样的对象:
[SerializePropertyNamesAsCamelCase]
public class Location
{
[Key]
public string Id { get; set; }
[IsFilterable, IsSortable]
public GeographyPoint GeographyPoint { get; set; }
}
我想做的是检索 10 KM 内的所有位置并按距离排序,所以最接近的显示优先。最后,我想知道那个距离是多少。
这是我尝试过的:
var index = GetIndex();
var parameters = new SearchParameters
{
Skip = 0,
Top = 20,
Filter = "geo.distance(geographyPoint, geography'POINT(-122.131577 47.678581)') le 10 "
};
var results = index.Documents.Search<Location>("*", parameters);
上面的问题是它没有告诉我距离,也没有按它排序。
我想知道如何完成上述操作?我是否必须double Distance
在 Location 对象中创建一个属性,如果是这样,那么我如何填充它以便我可以按它搜索、按它排序然后检索它?
解决方案
var orderBy = new List<string>();
orderBy.Add("geo.distance(LatLong, geography'POINT(" + request.LatLong + ")')");
var parameters = new SearchParameters {
Skip = 0,
Top = 20,
Filter = "geo.distance(geographyPoint, geography'POINT(-122.131577 47.678581)') le 10",
OrderBy = orderBy };
您还可以通过变量将 asc/desc 添加到订单的末尾,以升序或降序返回结果。
不幸的是,天蓝色搜索不会返回距离,您必须自己计算。
推荐阅读
- android - A: 重新安装应用程序后尝试访问 MediaStore 时出现 FileNotFoundException
- mysql - 使用 JSON_ARRAY_APPEND 将大数组插入 JSON 文档
- r - 重写反向代理的复杂路径
- c++ - C++程序没有使用向量进入for循环
- powerbuilder - 在数据窗口中列出行,并在另一个 powerbuilder 中编辑行
- pandas - 错误“utf-8”编解码器无法解码字节 0xf4
- sql - 带有 where 子句的右外连接不返回预期结果
- javascript - Jquery 切换持续时间似乎不起作用
- java - 为什么我的方法在我验证它在junit中被调用后继续工作?
- webpack - ModuleFederationPlugin 的“共享”配置中的“单例”选项究竟是如何工作的?