J'ai besoin d'obtenir les 15 emplacements les plus proches d'un point. J'ai d'abord créé un index spatial, puis j'essaie d'ordonner le résultat par distance en appelant la méthode OrderByDistance mais j'obtiens cette exception

Impossible d'exécuter la méthode de requête 'OrderByDistance'. Le champ 'spatial.point(Latitude, Longitude)' ne peut pas être utilisé lorsque l'index statique 'SupplierCoordinatesLookup' est interrogé. Les champs spatiaux dynamiques ne peuvent être utilisés qu'avec des requêtes dynamiques. Pour les requêtes d'index statiques, veuillez utiliser des champs spatiaux valides définis dans la définition d'index.

Ceci est ma requête

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

Et voici le code de mon index

Map = collection => from doc in collection
                            select new
                            {
                                Coordinates = CreateSpatialField(doc.Latitude, doc.Longitude)
                            };
        Store(x => x.Id, FieldStorage.Yes);
1
sqlcte 27 sept. 2019 à 17:05

1 réponse

Meilleure réponse

Essayez d'utiliser:

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

Votre index contient déjà des points, vous n'avez donc qu'à fournir un champ d'index ("Coordonnées") à votre requête

1
garay 6 oct. 2019 à 09:36