2016-07-02 1 views
0

Я использую Elasticsearch на моем Rails APP trhough gem 'chewy'.Rails - Elasticsearch - поиск по координатам с Chewy

У меня есть две модели: продукты и теги [отношение многих ко многим, управляемое через модель ProductTag].

Я определил ProductsIndex следующим образом:

Я могу успешно выполнить запрос ProductsIndex в мой контроллер с:

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

, который возвращает мне все объекты продукта с указанным тегом.

Мой вопрос: Как я могу запросить ProductIndex вернуть все объекты Product в радиусе 100Km из заданной пары координат (lat/lon)?

Я строго не нужно сортировать по расстоянию, но если вы включите его в ответ будет весьма признателен :)

редактировать

Я пытаюсь что-то вроде этого, но он не работает :

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> 
    } 
}) 

Надеется, что это может помочь.