【问题标题】:Ravendb Spatial search with ORderBydistanceRavendb 使用 ORderBydistance 进行空间搜索
【发布时间】:2019-10-06 17:36:03
【问题描述】:

我需要从一个点获取最近的 15 个位置。我首先创建了一个空间索引,然后我尝试通过调用 OrderByDistance 方法按距离对结果进行排序,但我得到了这个异常

无法执行查询方法“OrderByDistance”。查询静态索引“SupplierCoordinatesLookup”时,不能使用字段“spatial.point(Latitude, Longitude)”。 动态空间字段只能用于动态查询,静态索引查询请使用索引定义中定义的有效空间字段。

这是我的查询

List<SupplierCoordinates> suplierCoordinates = _documentSession
           .Query<SupplierCoordinates, SupplierCoordinatesLookup>()
            .Spatial(
                "Coordinates",
                criteria => criteria.WithinRadius(0, supplierCoordinates.Latitude, supplierCoordinates.Longitude))
            .OrderByDistance(factory => factory.Point(x => x.Latitude, x => x.Longitude), supplierCoordinates.Latitude, supplierCoordinates.Longitude)
            .Take(15)
            .ToList();

这是我的索引的代码

Map = collection => from doc in collection
                            select new
                            {
                                Coordinates = CreateSpatialField(doc.Latitude, doc.Longitude)
                            };
        Store(x => x.Id, FieldStorage.Yes);

【问题讨论】:

    标签: c# linq ravendb


    【解决方案1】:

    尝试使用:

        _documentSession
               .Query<SupplierCoordinates, SupplierCoordinatesLookup>()
                .OrderByDistance("Coordinates", supplierCoordinates.Latitude, supplierCoordinates.Longitude)
                .Take(15)
                .ToList();
    

    您的索引已经包含点,因此您只需将索引中的一个字段(“坐标”)提供给您的查询

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-28
      • 2019-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多