使用轮胎从弹性搜索中查询提升

时间:2012-10-27 13:08:30

标签: ruby-on-rails elasticsearch tire

我有一组具有背景(例如“计算机科学”)和技能(例如“php”)的用户。我正在尝试搜索它们,同时强调背景或技能(用户在搜索时选择任一选项)。

我已经设法使用curl和这个JSON字符串工作(在这种情况下我强调背景):

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

现在我的问题是我无法弄清楚如何在Tire中使用此JSON作为查询,或在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 个答案:

答案 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
相关问题