当前位置: 首页 > 知识库问答 >
问题:

NEST 2.0与Elasticsearch for Geo距离感总是返回所有记录

鲜于允晨
2023-03-14

我有下面的代码使用C#.NET 4.5和NEST 2.0通过nuget。此查询总是返回我的类型'trackpoint',其中包含具有此距离搜索代码的文档总数。我有2790份文件,计数返回仅此而已。即使以1厘米为距离单位,它也会返回所有2790份文件。我的“跟踪点”类型有一个位置字段、geo_point类型、gehash true和geohash_precision9。

我只是尝试根据距离过滤结果,而不使用任何其他搜索词,对于我的2790条记录,它会返回所有结果,而不考虑度量单位。所以我不得不错过一些东西(希望是小的)。感谢您的帮助。我能找到的嵌套示例已经有一两年的历史了,这种语法似乎不再有效了。

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发布搜索,我将从2790个文档中得到143个文档。所以我知道数据是正确的,因为这是一个现实的回报。

{
"query" : {
    "filtered" : {
        "filter" : {
            "geo_distance" : {
                "distance" : "4km",
                "location" : {
                    "top_left": {
                        "lat" : 35,
                        "lon" : -82
                    }
                }
            }
        }
    }
  }
}

共有2个答案

毋举
2023-03-14

我忘记指定要搜索位置的字段:(但我在这里发帖只是为了以防万一其他人也有同样的问题,让自己感到羞愧而更加努力。。。

.Field(p=

        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)))
             )
           )
       );
鲍健柏
2023-03-14

看起来您没有在查询中指定字段。试试这个:

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)))
        )
    )
    );
 类似资料:
  • 更新时间:2018-09-15 11:02:51 功能说明 光和距离传感器。ltr553 是一款环境光和距离传感器,通过 I2C 进行数据交互。 硬件资源 DevelopKit 开发板上自带有 ltr553 传感器: 软件设计 根据 ltr553 的数据手册,ALS 有两个通道寄存器 0x8A、0x88,一般我们会同时读取两个通道的值,然后取其平均值,PS 值存放在寄存器 0x8D 中,直接读取就

  • 我是一个使用java和Android的新手。我设法按照一些教程让我的gps在Android2.3手机上工作,但我注意到手机的gps只在40米内准确,这相当于纬度/经度小数点后第三位的精度。

  • 问题内容: 简而言之,当不使用_geo_distance排序时,是否有一种方法可以返回地理距离? 更新:为澄清起见,我希望结果按随机顺序排列并包含距离。 问题答案: 是的,您可以使用脚本字段。 例如,假设您的文档具有一个名为的地理位置字段,则可以使用以下内容: (请注意,只是一个转义的单引号,所以真的是) 如果还希望返回该字段,则可以如下指定:

  • 问题内容: 我实现了一个脚本字段,该字段返回的距离如下所示:Elasticsearch结果中的返回距离? Ruby: 但是返回的距离不正确。如果该点很近,则距离会更正确,但是随着距离的增加,它会变得越来越不正确。 似乎无法弄清楚我在做什么。 问题答案: distanceInKm()将距离计算为平面上的点,该速度很快但不太准确。尝试改用arcDistanceInKm()。

  • 问题内容: 我在Elasticsearch中有一个小型数据库,出于测试目的,我想拉回所有记录。我正在尝试使用以下形式的网址… 有人可以给我您用来完成此操作的URL吗? 问题答案: 我认为支持lucene语法是这样的: 大小默认为10,因此您可能还需要获取10个以上的商品。(其中BIGNUMBER等于您认为大于数据集的数字) 但是,elasticsearch文档建议使用扫描搜索类型针对大型结果集。

  • 问题内容: 假设我的SQL Server 2012数据库中有下表: MyTable: 我想获取特定扇区的每个扇区的平均值, 但要基于FkId的总数中可用的日期总数 。也就是说,如果我想获得的平均= 1的日期,也就是说,和我的结果集将是: 换句话说,不除以该部门可用的日期数,而是除以该表中该日期范围的日期总数。 我认为可以通过以下方式对CTE进行此操作: 但我真的希望有更好的方法。有什么想法吗? 问