
有两个表 A,B 。A 表存的文章标题、发布时间这些信息,B 表存的是文章的内容,两个表的 ID 是一致的。现在的问题是:有关键词搜索的时候先在 A 表的标题里面进行搜索,再到 B 表的文章内容字段里面进行搜索,最后要把两个结果合并起来再按照 A 表的发布时间进行倒排。用了 SQL 的 union 搜索,在排序的时候就会把两个结果混合在一起,需要把 A 表的搜索结果按照时间排序放在前面,不知道各位有没有啥办法。
1 RedBeanIce 2020-09-29 14:56:36 +08:00 感觉内容搜索,标题搜索,已经是 ES ???? |
2 LeeSeoung 2020-09-29 14:59:25 +08:00 A 排序 union all B 排序 |
3 DonaldY 2020-09-29 15:02:43 +08:00 查询 sql 时,多加个字段来标识数据源来自哪,order by 这个字段。 |
4 jiorix 2020-09-29 15:03:44 +08:00 select aa.* from ( select a.*, 1 as queryType from a where title like '%关键字%' union select a.*, 2 as queryType from a where a.id in ( select id from b where content like '%关键字%' ) ) as aa order by queryType, .... |
5 mxm145 OP |
6 liuky 2020-09-30 08:37:37 +08:00 |
7 mxm145 OP @liuky 这个跑出来的数据是 title 和 content 都有关键词的结果,我想要的是只要两个其中一个的都要显示出来,而且按照 title 匹配到的在前面,content 匹配到的在后面。如果把你的 and 改成 or 的话也不行 |
8 mxm145 OP 我最后使用的是两个子查询 union 来实现的,参考这个: https://www.jianshu.com/p/2a53c2fdb042 |