serchkick 找到正确结果后如何重新排序结果?

How to reorder results after serchkick finds a proper result?

当我在 rails 控制台中这样做时:posts = Post.active.search('lorem').records 它给了我这个:Post Load (0.9ms) SELECT `posts`.* FROM `posts` WHERE `posts`.`id` IN (3, 1, 2) LIMIT 11 但是当我这样做时 posts.pluck(:id) 结果是:[1, 2, 3] .因此,如您所见,顺序不一样,因为它在查询中,应该是 [3, 1, 2]。如何重新排序结果,使其成为 [3, 1, 2]?谢谢。

这是一个原始 MySQL 查询,它将生成您期望的输出:

SELECT *
FROM posts
WHERE
    id IN (3, 1, 2)
ORDER BY
    FIELD(id, 3, 1, 2)
LIMIT 11

我对 ActiveRecord 知之甚少,但我希望您需要对上述 ORDER BY 子句使用原始 SQL,并且可能对整个查询使用原始 SQL。这里的一种选择是 运行 整个原始查询:

sql = "SELECT * FROM posts ... ORDER BY FIELD(id, 3, 1, 2) LIMIT 11"
records_array = ActiveRecord::Base.connection.execute(sql)