有两个表 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
|