RavenDB 空间过滤器
RavenDB Spatial Filter
帮助理解 RavenDB 查询,我使用以下模型来存储和索引空间数据。
public class GeoRecord {
public string SearchId {get; set;}
public string Tag {get; set;}
public double Latitude {get; set;}
public double Longitude {get; set;}
}
public class GeoRecord_GeoIndex : AbstractIndexCreationTask<GeoRecord>
{
public GeoRecord_GeoIndex()
{
Map = records => from @record in records
select new
{
IndexName = "geoIndex",
record.SearchId,
Coordinates = CreateSpatialField(@record.Latitude, @record.Longitude)
};
}
}
我可以像下面这样使用空间查询来过滤所有 GeoRecord:
await session
.Query<GeoRecord, GeoRecord_GeoIndex>()
.Spatial("Coordinates", factory => factory.Within(shapeWkt: wkt))
.ToListAsync();
但是我想通过 SearchId 和坐标进行过滤,我得到了这个解决方案,但是我想了解它是否使用 GeoRecord_GeoIndex 而不是从 GeoRecord 中过滤结果。
await session.Advanced.AsyncDocumentQuery<GeoRecord, GeoRecord_GeoIndex>()
.WhereIn("SearchId", activeSearchIds)
.Intersect()
.Spatial("Coordinates", criteria => criteria.Within(shapeWkt:wkt))
.ToListAsync();
您正在查询索引 GeoRecord_GeoIndex
,它是用来过滤的索引。
一个静态索引包含:
- Map 函数中指定的每个索引字段的索引项列表,
(您的索引字段是:IndexName、SearchId 和 Coordinates)
- 到相关文档的映射
在查询时,根据您的查询过滤索引词,并从数据库中获取相关文档
一些 link 演示:
https://demo.ravendb.net/demos/csharp/static-indexes/map-index#step-3
帮助理解 RavenDB 查询,我使用以下模型来存储和索引空间数据。
public class GeoRecord {
public string SearchId {get; set;}
public string Tag {get; set;}
public double Latitude {get; set;}
public double Longitude {get; set;}
}
public class GeoRecord_GeoIndex : AbstractIndexCreationTask<GeoRecord>
{
public GeoRecord_GeoIndex()
{
Map = records => from @record in records
select new
{
IndexName = "geoIndex",
record.SearchId,
Coordinates = CreateSpatialField(@record.Latitude, @record.Longitude)
};
}
}
我可以像下面这样使用空间查询来过滤所有 GeoRecord:
await session
.Query<GeoRecord, GeoRecord_GeoIndex>()
.Spatial("Coordinates", factory => factory.Within(shapeWkt: wkt))
.ToListAsync();
但是我想通过 SearchId 和坐标进行过滤,我得到了这个解决方案,但是我想了解它是否使用 GeoRecord_GeoIndex 而不是从 GeoRecord 中过滤结果。
await session.Advanced.AsyncDocumentQuery<GeoRecord, GeoRecord_GeoIndex>()
.WhereIn("SearchId", activeSearchIds)
.Intersect()
.Spatial("Coordinates", criteria => criteria.Within(shapeWkt:wkt))
.ToListAsync();
您正在查询索引 GeoRecord_GeoIndex
,它是用来过滤的索引。
一个静态索引包含:
- Map 函数中指定的每个索引字段的索引项列表,
(您的索引字段是:IndexName、SearchId 和 Coordinates) - 到相关文档的映射
在查询时,根据您的查询过滤索引词,并从数据库中获取相关文档
一些 link 演示:
https://demo.ravendb.net/demos/csharp/static-indexes/map-index#step-3