想要在当前的springmvc+jsp项目中加一个搜索功能,有几张表如博客、视频、问答,每个表做了一个solr的core,求问怎么搜索的时候,同时在三个数据源中查询,并把结果按时间倒序查询?
想要在当前的springmvc+jsp项目中加一个搜索功能,有几张表如博客、视频、问答,每个表做了一个solr的core,求问怎么搜索的时候,同时在三个数据源中查询,并把结果按时间倒序查询?
方案
1 :不同的表使用sql返回相同的字段bean,逻辑排序 返回; 2 :新建一个统计表,写一个task 定时将三个数据源中的数据 写入这个新表,然后只查这个表就好 推荐第2种
要是考虑分页(每页20件),如果按时间排序,可以每类都取对应的件数,在JAVA层合并排序完,取20条,然后返回给画面。
下一次查询时,倒序按前一次最后一件的时间为条件再 每类取20条,再合并排序处理。一直最后合并完也不够20条,代表没有更多数据了。
新建统计表的方法挺好的,不过如果数据源太大的话不太合适,例如像百度一样,博客、视频、新闻各有几千万,假如都推到一个统计表,这个表就太大了。stream处理数据结果也一样,即使查询结果只有十几万,处理起来也比较影响性能。也有另外一个方案是每个数据源只取前500条数据来合并,因为在搜索引擎中,越后面的数据是越不符合要求的,这样结果集最多就只有几千条数据,然后对结果集来分页。实际上这是一种丢数据的方案,感觉不太好。个人以为折中的方案就是每个数据源按一定比例去取数据,比如博客取5条、视频5条、新闻5条、问答5条,然后凑成每页20条。
15 回答8.4k 阅读
8 回答6.2k 阅读
1 回答4.1k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
2 回答3.8k 阅读
3 回答1.7k 阅读✓ 已解决
可以考虑从不同的数据源将数据返回之后,在客户端使用Java stream等方式来处理。