2016-03-15 54 views
2

我有下面的代碼使用C#.NET 4.5和NEST 2.0通過nuget。這個查詢總是返回我的類型'trackpointes'與包含此距離搜索代碼的文檔總數。我有2,790份文件,計數回報就是這樣。即使距離單位1釐米,它也會返回所有2,790個文檔。我的類型'trackpointes'有一個位置字段,類型爲geo_point,geohash爲真,geohash_precision爲9.NEST 2.0與Elasticsearch的GeoDistance總是返回所有記錄

我只是試圖根據距離篩選結果,沒有任何其他搜索條件,對於我的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))) 
      ) 
      ) 
     ); 

如果我使用郵遞員瓦特/ JSON之下,我得到143個總文件的返回了2,790連接到我的ES和POST的情況下進行搜索。所以我知道數據是正確的,因爲這是一個現實的回報。

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

您可能想要考慮使用掃描和滾動來獲得10,000個結果(一次可能是500個),而不是要求Elasticsearch在一個請求中將它們全部返回給您;它可能會減少羣集上的壓力 - https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-scroll.html –

回答

3

看起來你沒有在你的查詢中指定字段。試試這個:

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))) 
     ) 
    ) 
    ); 
+0

這完全是它,我欣賞@Rob響應。我還不能+1,但如果我可以。 –

1

我忘了指定字段來搜索位置。 :(但我在這裏發帖,以防萬一別人有同樣的問題,並羞辱自己變成更加努力......

點域(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))) 
      ) 
      ) 
     ); 
+0

不會說謊。我剛剛完成了同樣的事情;感謝你的這個問題和答案 –