我有一组具有背景(例如“计算机科学”)和技能(例如“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.
答案 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