带有 Elasticsearch for GeoDistance 的 NEST 2.0 总是 returns 所有记录
NEST 2.0 with Elasticsearch for GeoDistance always returns all records
我有以下代码,使用 C# .NET 4.5 和 NEST 2.0 通过 nuget。此查询总是 returns my type 'trackpointes' 以及具有此距离搜索代码的文档总数。我有 2,790 份文件,return 就是这样。即使以 1 厘米作为距离单位,它 return 也包含所有 2,790 个文档。我的 'trackpointes' 类型有一个位置字段,geo_point 类型,geohash 为真,geohash_precision 为 9。
我只是想根据距离过滤结果,不使用任何其他搜索词,对于我的 2,790 条记录,return 全部都是,而不考虑测量单位。所以我必须遗漏一些东西(希望很小)。任何帮助表示赞赏。我能找到的 NEST 示例已有一两年历史,而且该语法似乎不再有效。
double distance = 4.0;
var geoResult = client.Search<TrackPointES>(s => s.From(0).Size(10000).Type("trackpointes")
.Query(query => query
.Bool( b => b.Filter(filter => filter
.GeoDistance(geo => geo
.Distance(distance, Nest.DistanceUnit.Kilometers).Location(35, -82)))
)
)
);
如果我使用 POSTMAN 连接到我的 ES 实例并 POST 使用以下 JSON 进行搜索,我得到 return 总共 143 个2,790 份文件。所以我知道数据是正确的,因为那是现实的 return。
{
"query" : {
"filtered" : {
"filter" : {
"geo_distance" : {
"distance" : "4km",
"location" : {
"top_left": {
"lat" : 35,
"lon" : -82
}
}
}
}
}
}
}
您似乎没有在查询中指定字段。试试这个:
var geoResult = client.Search<Document>(s => s.From(0).Size(10000)
.Query(query => query
.Bool(b => b.Filter(filter => filter
.GeoDistance(geo => geo
.Field(f => f.Location) //<- this
.Distance(distance, Nest.DistanceUnit.Kilometers).Location(35, -82)))
)
)
);
我忘记指定要搜索位置的字段。 :( 但我在这里发帖是为了以防万一其他人遇到同样的问题并让自己感到羞愧而更加努力...
.Field(p => p.location) 是查询中的差异。
var geoResult = client.Search<TrackPointES>(s => s.From(0).Size(10000).Type("trackpointes")
.Query(query => query
.Bool( b => b.Filter(filter => filter
.GeoDistance(geo => geo.Field(p => p.location).DistanceType(Nest.GeoDistanceType.SloppyArc)
.Distance(distance, Nest.DistanceUnit.Kilometers).Location(35, -82)))
)
)
);
我有以下代码,使用 C# .NET 4.5 和 NEST 2.0 通过 nuget。此查询总是 returns my type 'trackpointes' 以及具有此距离搜索代码的文档总数。我有 2,790 份文件,return 就是这样。即使以 1 厘米作为距离单位,它 return 也包含所有 2,790 个文档。我的 'trackpointes' 类型有一个位置字段,geo_point 类型,geohash 为真,geohash_precision 为 9。
我只是想根据距离过滤结果,不使用任何其他搜索词,对于我的 2,790 条记录,return 全部都是,而不考虑测量单位。所以我必须遗漏一些东西(希望很小)。任何帮助表示赞赏。我能找到的 NEST 示例已有一两年历史,而且该语法似乎不再有效。
double distance = 4.0;
var geoResult = client.Search<TrackPointES>(s => s.From(0).Size(10000).Type("trackpointes")
.Query(query => query
.Bool( b => b.Filter(filter => filter
.GeoDistance(geo => geo
.Distance(distance, Nest.DistanceUnit.Kilometers).Location(35, -82)))
)
)
);
如果我使用 POSTMAN 连接到我的 ES 实例并 POST 使用以下 JSON 进行搜索,我得到 return 总共 143 个2,790 份文件。所以我知道数据是正确的,因为那是现实的 return。
{
"query" : {
"filtered" : {
"filter" : {
"geo_distance" : {
"distance" : "4km",
"location" : {
"top_left": {
"lat" : 35,
"lon" : -82
}
}
}
}
}
}
}
您似乎没有在查询中指定字段。试试这个:
var geoResult = client.Search<Document>(s => s.From(0).Size(10000)
.Query(query => query
.Bool(b => b.Filter(filter => filter
.GeoDistance(geo => geo
.Field(f => f.Location) //<- this
.Distance(distance, Nest.DistanceUnit.Kilometers).Location(35, -82)))
)
)
);
我忘记指定要搜索位置的字段。 :( 但我在这里发帖是为了以防万一其他人遇到同样的问题并让自己感到羞愧而更加努力...
.Field(p => p.location) 是查询中的差异。
var geoResult = client.Search<TrackPointES>(s => s.From(0).Size(10000).Type("trackpointes")
.Query(query => query
.Bool( b => b.Filter(filter => filter
.GeoDistance(geo => geo.Field(p => p.location).DistanceType(Nest.GeoDistanceType.SloppyArc)
.Distance(distance, Nest.DistanceUnit.Kilometers).Location(35, -82)))
)
)
);