这可能是一件简单的事情,但我似乎无法理解它:
我希望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基本上要求同样的事情;当然没有可行的解决方案/答案。
答案 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_score
如here所述。
易peasy。