Насколько я знаю, невозможно получить ответ, который объединяет поля документа с загруженной записью.
Обычно я предпочитаю полностью полагаться на данные в проиндексированном документе, где это возможно. (используя load: false
в качестве опции поиска) и загружайте записи AR только в качестве второго шага, если это необходимо. Например:
result = Product.search("test", load: false).response
# If you also need AR records, could do something like:
product_ids = result.map(&:id)
products_by_id = {}
Product.where(id: product_ids).find_each do |ar_product|
products_by_id[ar_product.id] = ar_product
end
merged_result = result.map do |es_product|
es_product[:ar_product] = products_by_id[es_product.id]}
end
Кроме того, может быть полезно извлечь документ, сохраненный в индексе ES для конкретной записи, что я обычно делал бы, определяя следующий метод в вашем классе Product:
def es_document
return nil unless doc = Product.search_index.retrieve(self).presence
Hashie::Mash.new doc
end