使用searchkick和rails使用:where子句以随机顺序获取结果

时间:2017-09-05 00:43:57

标签: ruby-on-rails elasticsearch searchkick

这可能是一件简单的事情,但我似乎无法理解它:

我希望elasticsearch返回:

@random_books   = Book.search("*", where: { status: :published }, body: { query: { function_score: { random_score: { seed: seed }}}}, page: params[:page], per_page: 12)

返回的results不符合where: {status: :published}条款。如何对此查询进行语法化?

编辑:发现another question基本上要求同样的事情;当然没有可行的解决方案/答案。

2 个答案:

答案 0 :(得分:0)

请替换你的where子句:

  

其中:{'状态IN(?)',['已发布']}

答案 1 :(得分:0)

好的,这是解决方案:

seed = Time.zone.now.to_i

@random_books   = Book
                    .search("*",
                      body: {
                        query: {
                          function_score: {
                            query: {
                              match: { status: :published }
                              },
                            random_score: {
                              seed: seed
                            }
                          }
                        }
                      },
                      page: params[:random],
                      per_page: 12)

如果我们将where:传递给elasticsearch,Searchkick会ignore the options(如body子句)。所以我们match query内的function_scorehere所述。

易peasy。