我希望在Google风格的下拉菜单中获得预测性搜索建议。我发现Elasticsearch将成为可能的方式(是吗?),但是在将其实现到我的Rails应用程序时遇到了一些问题(在Heroku上运行,但这不是问题 - 至少还没有:)。
我的应用非常简单。我有一个空间"的模型,视图和控制器,类似于校园中的房间或建筑物。数据库结构非常简单,它包含一个表("空格"),其中包含名称,代码,地址等详细信息。我希望其中任何一个都可以搜索。
我尝试通过本指南实施Elasticsearch:http://crestcode.com/deploying-elasticsearch-on-heroku-with-rails-4/
所以目前我已基本完成了第4步,但它不起作用。这些是我的代码片段,代表指南告诉我要做的部分(原谅不好的缩进):
视图/空间/ index.html.erb
<%= form_tag({controller: "spaces", action: "show"}, method: "get", id: 'searchbox', class: "nifty_form") do %>
<%= label_tag(:q, "Search for a building or a room:") %>
...
<%= text_field_tag(:q, params[:q]) %>
的routes.rb
resources :spaces
resource :space, only: [:show]
模型/ space.rb
require 'elasticsearch/model'
class Space < ActiveRecord::Base
include Elasticsearch::Model
include Elasticsearch::Model::Callbacks
end
Space.import
控制器/ spaces_controller.rb
def show
if params[:q].present?
@space = Space.search(params[:q].split.join(' AND '))
else
@space = []
end
end
错误是:
非常感谢帮助!
答案 0 :(得分:2)
根据我在elasticsearch-model的gem github页面上发现的内容,问题是你在Elasticsearch Response对象上调用了name
方法。你应该在结果文件上调用它。
文档说:
response = Article.search 'fox dogs'
response.results.first._source.title # => "Quick brown fox"
所以在你的情况下它将是:
response = Space.search(params[:q].split.join(' AND '))
@space = response.results.first._source