【问题标题】:Getting Distance with Azure Search Service使用 Azure 搜索服务获取距离
【发布时间】:2018-09-16 21:22:21
【问题描述】:

我有一个像这样的对象:

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

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

我想知道如何完成上述操作?我是否必须在 Location 对象中创建一个 double Distance 属性,如果是这样,那么我如何填充它以便我可以按它搜索、按它排序然后检索它?

【问题讨论】:

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


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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-20
    • 2010-12-28
    • 2018-12-14
    • 2011-01-18
    • 2012-09-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多