【问题标题】:Boost from query in elasticsearch using tire使用轮胎从弹性搜索中的查询中提升
【发布时间】:2013-04-17 07:18:16
【问题描述】:

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

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

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

现在我的问题是我不知道如何在 Tyre 中使用这个 JSON 作为查询,或者在 Tire DSL 中编写等效的查询。

编辑

其实我是看Tire源代码才知道的。

这是它的样子:

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。

【问题讨论】:

    标签: ruby-on-rails elasticsearch tire


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-14
      • 2012-06-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多