2012-10-27 50 views
2

我有一组拥有背景(例如“计算机科学”)和技能(例如“php”)的用户。我试图在强调背景或技能的同时搜索它们(用户在搜索时选择任一选项)。从使用轮胎的弹性搜索查询中提升

我已经成功使用curl这个JSON字符串(在这种情况下,我强调的背景)得到这个工作:

'"query" : { 
    "bool" : { 
     "should" : [ 
      { 
       "text" : {"skills" : {"query" : "php mysql html css"}} 
      }, 
      { 
       "text" : {"backgrounds" : {"query" : "computer science", "boost" : 5}} 
      } 
     ] 
    } 
}' 

现在我的问题是,我无法弄清楚如何可以使用这个JSON在Tire中作为查询,或者在Tire DSL中写入等价物。

编辑

其实我想通了通过看轮胎的源代码。

这里是什么样子:

results = Users.search(:load => true) do 
    query do 
    boolean do 
     should { string "skills:#{skills_query}", {:boost => skills_boost}} 
     should {string "backgrounds:#{backgrounds_query}", {:boost => backgrounds_boost}} 
    end 
    end 
end 

我升压设置为5上的其他一个我想强调的是,和0。

回答

1

似乎有一个严重缺乏良好的文件,如何在轮胎正确做到这一点。经过几个小时的搜索,我发现这篇文章。我将在稍后写博客,希望让人们不必像我一样永远挖掘。无论如何,下面是我根据你的建议所做的事情,而且它通过将名称字段放在其他属性匹配的上方而成为一种魅力。

page = params[:page].present? ? params[:page] : 1 
tire.search(page: page, per_page: ApplicationHelper::MAX_SEARCH_LENGTH) do 
    query do 
    boolean do 
     should { string "name:#{params[:q]}*", {:boost => 100}} 
     should { string "#{params[:q]}*"} 
    end 
    end 
end