Как вернуть два разных результата поиска в один в searchkick (ElasticSearch)

У меня есть эти два поиска

foods = Food.search name, fields: [:name], where: {
   or: [
    [{nutritionist_id: nil}, {nutritionist_id: current_nutritionist_id}]
   ]
}, order: {_score: :desc}

recipes = Recipe.search name, fields: [:recipe_name], where: {
   or: [
        [{nutritionist_id: nil}, {nutritionist_id: current_nutritionist_id}]
      ]
 }, order: {_score: :desc}

Я хочу, чтобы foods и recipes возвращались в одном и том же результате. Например, объединить их, что-то вроде выше или другим лучшим способом.

return foods + reciples

person Danilo Cândido    schedule 08.01.2018    source источник


Ответы (1)


Я решил это с помощью Searchkick.search вместо:

foods = Food.search name, fields: [:name], where: {
   or: [
    [{nutritionist_id: nil}, {nutritionist_id: current_nutritionist_id}]
   ]
}, order: {_score: :desc}

а также

recipes = Recipe.search name, fields: [:recipe_name], where: {
   or: [
        [{nutritionist_id: nil}, {nutritionist_id: current_nutritionist_id}]
      ]
 }, order: {_score: :desc}

Я использовал.

result = Searchkick.search(name, index_name: [Food, Recipe], fields: [:name, :recipe_name], 
  where: {
      _or: [ {nutritionist_id: nil}, {nutritionist_id: current_nutritionist_id} ]
  }, order: {_score: :desc})
result

Таким образом, Searchkick выполняет поиск в этих двух моделях Food и Recipe и возвращает массив с обоими результатами.

person Danilo Cândido    schedule 08.01.2018