【发布时间】:2016-07-01 01:08:08
【问题描述】:
我通过 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 发布搜索,我会在 2,790 个文档中返回 143 个文档。所以我知道数据是正确的,因为这是一个现实的回报。
{
"query" : {
"filtered" : {
"filter" : {
"geo_distance" : {
"distance" : "4km",
"location" : {
"top_left": {
"lat" : 35,
"lon" : -82
}
}
}
}
}
}
}
【问题讨论】:
-
您可能需要考虑使用扫描和滚动来返回 10,000 个结果(可能一次 500 个),而不是要求 Elasticsearch 在一个请求中将它们全部返回给您;它可能会给您的集群带来更少的压力 - elastic.co/guide/en/elasticsearch/reference/current/…
标签: elasticsearch nest geo