我正在尝试在 Rails 4 应用程序中使用弹性搜索和轮胎创建搜索页面。我想要完成的是,如果用户访问 /crews,系统会显示带有方面搜索等的船员列表页面,并加载 20 个最后添加的记录。因此,当用户第一次点击页面时,Elasticsearch 应该在没有给出查询的情况下默认返回 20 条记录。
因此,在我对机组人员的索引操作中,我调用了搜索方法
def index
@crews = Crew.search(params)
end
这是我在没有给出“查询”时返回所有值的搜索方法:
def self.search(params={})
tire.search(page: params[:page], per_page: 20) do
query do
boolean do
must { string params[:query], default_operator: "AND" } if params[:query].present?
# just list all if no query given
must { string "*"} if params[:query].nil?
end
end
filter :term, 'crew_status.name.exact' => params[:crew_status] if params[:crew_status].present?
sort { by :updated_at, "desc" } if params[:query].blank?
facet "status" do
terms :crew_status_id
terms 'crew_status.name.exact'
end
# raise to_curl
end
end
这可行,但是当在 Elasticsearch 中找不到任何记录时,Tire 会给出错误“SearchPhaseExecutionException [Failed to execute phase [query]”,并且这个当前的解决方案也感觉像一个黑客,我想知道如何以正确的方式完成我的首选行为。如果没有给出查询,那只是加载所有记录,如果结果为 0,则不会出错。
我以前与 Sunspot 合作过,因为我没有弄错我想让我的工作人员#index 页面工作的方式是 Sunspot 的默认设置。我希望有人可以帮助我,并为我指明正确的方向,以便在 Tyre / Elasticsearch 中正确执行此操作。
提前致谢!
问候,丹尼尔