2

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

我已经设法使用带有这个 JSON 字符串的 curl 来完成这个工作(在这种情况下,我强调背景):

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

现在我的问题是我不知道如何在 Tyre 中使用这个 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。

4

1 回答 1

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
于 2013-04-16T23:18:16.473 回答