2016-07-02 46 views
0

我在我的Rails應用程序中使用Elasticsearch應用程序gem 'chewy'Rails - Elasticsearch - 通過座標搜索耐克

我有兩種模式:產品和標籤[多對多關係,通過ProductTag模型管理]。

我定義ProductsIndex如下:

我能夠成功查詢ProductsIndex在我的控制器:

q = params[:q] 
@products = ProductsIndex.filter { tags(:and) == [q] }.load 

返回我所有指定標記的產品對象。

我的問題是:如何查詢ProductIndex以從給定的座標對(經度/緯度)返回100Km範圍內的所有Product對象?

我並不需要嚴格按距離排序,但如果你將其包含在你的答案我們將不勝感激:)

編輯

我想是這樣的,但它不工作:

ProductsIndex.filter { 
    geo_distance: {  
    distance: '100km',  
    location: {   
     lat: 60.0951482712848,   
     lon: -86.4810766234584  
    } 
    } 
} 

我得到了下面的語法錯誤

SyntaxError: (irb):10: syntax error, unexpected ':', expecting '}' 
...uctsIndex.filter {geo_distance: { distance: '100km', l... 
...        ^

回答

0

這是一個瘋狂的追捕,和一個漫長的下午,但最終的錯誤是非常愚蠢的:

  1. 我用location查詢,而我定義爲coordinates字段類型;
  2. .filter後面的錯誤方括號。

正確的語法如下:

ProductsIndex.filter(geo_distance: { 
    distance: "100km", 
    coordinates: { 
    lat: <latitude>, 
    lon:<longitude> 
    } 
}) 

希望它可以幫助。