如何解决根据searchkick中的两个唯一字段与SQL DISTINCT相同获取结果
我有一个Follow
模型,其中有两个属性follower_id
和followable_id
。
这是search_data定义:
{
name: [followable.name,follower.name],username: [followable.username,follower.username],followable_id: followable_id,follower_id: follower_id
}
我想执行一个搜索,该搜索返回考虑字段[followable_id,folderer_id]的唯一结果。我认为这类似于SELECT disTINCT ON followable_id,follower_id FROM "follows"
。
例如,[[10,2],[2,5],10]]
应该返回[[10,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}
]}
)
编辑:
我认为disTINCT可能相似。但是,我尝试了以下操作:
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]
。但是如您所见,查询确实返回了重复的对。
解决方法
我不了解searchkick,但可以共享等效的E.S(如果有帮助的话),您可以将其转换为等效的searchKick。
{
"size": 0,"aggs": {
"distinct": {
"terms": {
"script": {
"source": "doc['follower_id'] + '|' + doc['followable_id']"
},"size": 100
}
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。