我有一个这样的对象:
[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
属性,如果是的话,该如何填充它,以便可以对其进行搜索,排序并进行检索?
答案 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以返回升序或降序结果。
不幸的是,天蓝色搜索无法返回距离,您必须自己计算。