我有一个 Follow
具有(除其他外)两个属性的模型 follower_id
以及 followable_id
.
这是搜索数据定义:
{
name: [followable.name, follower.name],
username: [followable.username, follower.username],
followable_id: followable_id,
follower_id: follower_id
}
我想执行一个搜索,返回唯一的结果,考虑到字段[followable\u id,follower\u id]。我认为这和 SELECT DISTINCT ON followable_id, follower_id FROM "follows"
.
例如, [[10, 2], [2, 5], [2, 10]]
你应该回来 [[10, 2], [2, 5]]
或者 [[2, 5], [2, 10]]
,对我来说,顺序没什么区别。对我来说,重要的是两人不重复。
我当前的搜索结果如下:
search = Follow.search('*',
fields: [:name, :username],
match: :word_start,
misspellings: {below: 5},
page: params[:page],
per_page: 10,
where: {_or: [
{follower_id: current_user.id},
{followable_id: current_user.id}
]}
)
编辑:
我以为他们可以相似。但是,我尝试了以下方法:
SELECT DISTINCT ON (follower_id, followable_id) follower_id, followable_id FROM "follows";
follower_id | followable_id
-------------+---------------
27 | 35
28 | 12
33 | 27
35 | 27
在这个例子中,它不应该返回 [27, 35]
或者 [35, 27]
. 但如您所见,查询确实返回了重复对。
1条答案
按热度按时间yshpjwxd1#
我不知道searchkick,但是我可以分享e.s等价物(如果有帮助的话),你可以把它转换成searchkick等价物。