我通过nuget使用C#.NET 4.5和NEST 2.0获得以下代码。此查询始终返回我的类型'trackpointes',其中包含此距离搜索代码的文档总数。我有2,790个文件,计数回报就是这样。即使距离单位为1厘米,它也会返回所有2,790个文档。我的'trackpointes'类型有一个位置字段,geo_point类型,geohash true和geohash_precision为9.
我只是试图根据距离过滤结果而没有任何其他搜索条件,而对于我的2,790条记录,无论测量单位如何,它都会返回。所以我必须遗漏一些东西(希望很小)。任何帮助表示赞赏。我能找到的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实例并使用下面的JSON POST搜索,我会从2,790个中获得143个文档的返回。所以我知道数据是正确的,因为这是一个现实的回报。
{
"query" : {
"filtered" : {
"filter" : {
"geo_distance" : {
"distance" : "4km",
"location" : {
"top_left": {
"lat" : 35,
"lon" : -82
}
}
}
}
}
}
}
答案 0 :(得分:4)
您似乎没有在查询中指定字段。试试这个:
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)))
)
)
);
答案 1 :(得分:1)
我忘了指定要搜索位置的字段。 :(但我在这里张贴以防万一其他人有同样的问题,并羞辱自己更努力...
.Field(p =&gt; 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)))
)
)
);