2016-07-02 14 views
0

私はElasticsearchを自分のRails APP trhough gem 'chewy'に使っています。Rails - Elasticsearch - Chewyとの座標で検索

私は2つのモデルを持っています:製品とタグ[多対多の関係、ProductTagモデルで管理]。私は成功したと私のコントローラでProductsIndexを照会することができ

:私は指定されたタグを持つすべての製品のオブジェクトを返します

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

は、私は次のようにProductsIndexを定義しました。

質問:ProductIndexを照会して、与えられた座標のペア(lat/lon)から半径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

それは野生の狩り、そして長い午後をされているが、最終的にエラーがかなり愚かだった:

    私は、フィールドタイプとして coordinates定義されている間、私はクエリで locationを使用していた
  1. .filter以降の角カッコが間違っています。

正しい構文は以下の通りです:

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

はそれが役立つかもしれない願っています。

関連する問題