使用Azure搜索服务拉近距离

时间:2018-09-16 21:22:21

标签: c# asp.net-mvc azure asp.net-core-mvc azure-search

我有一个这样的对象:

[SerializePropertyNamesAsCamelCase]
public class Location
{
    [Key]
    public string Id { get; set; }

    [IsFilterable, IsSortable]
    public GeographyPoint GeographyPoint { get; set; }
}

我想做的是检索距离在10公里之内的所有位置,并按距离排序,所以最接近的显示在前。最后,我想知道那个距离。

这是我尝试过的:

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);

上面的问题是它不告诉我距离,也不按距离排序。

我想知道如何实现上述目标?我是否必须在Location对象中创建一个double Distance属性,如果是的话,该如何填充它,以便可以对其进行搜索,排序并进行检索?

1 个答案:

答案 0 :(得分:1)

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以返回升序或降序结果。

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