使用Elasticsearch for GeoDistance的NEST 2.0始终返回所有记录

时间:2016-03-15 14:18:22

标签: elasticsearch nest geo

我通过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
                    }
                }
            }
        }
    }
  }
}

2 个答案:

答案 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)))
             )
           )
       );