首页 > 解决方案 > 使用 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 对象中创建一个属性,如果是这样,那么我如何填充它以便我可以按它搜索、按它排序然后检索它?

标签: c#asp.net-mvcazureasp.net-core-mvcazure-cognitive-search

解决方案


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 添加到订单的末尾,以升序或降序返回结果。

不幸的是,天蓝色搜索不会返回距离,您必须自己计算。


推荐阅读