网站要做一个搜索功能,怎么把不同表的数据做索引来检索呢?

新手上路,请多包涵

想要在当前的springmvc+jsp项目中加一个搜索功能,有几张表如博客、视频、问答,每个表做了一个solr的core,求问怎么搜索的时候,同时在三个数据源中查询,并把结果按时间倒序查询?

阅读 3.2k
5 个回答

可以考虑从不同的数据源将数据返回之后,在客户端使用Java stream等方式来处理。

方案
1 :不同的表使用sql返回相同的字段bean,逻辑排序 返回; 2 :新建一个统计表,写一个task 定时将三个数据源中的数据 写入这个新表,然后只查这个表就好 推荐第2种

要是考虑分页(每页20件),如果按时间排序,可以每类都取对应的件数,在JAVA层合并排序完,取20条,然后返回给画面。
下一次查询时,倒序按前一次最后一件的时间为条件再 每类取20条,再合并排序处理。一直最后合并完也不够20条,代表没有更多数据了。

新手上路,请多包涵

新建统计表的方法挺好的,不过如果数据源太大的话不太合适,例如像百度一样,博客、视频、新闻各有几千万,假如都推到一个统计表,这个表就太大了。stream处理数据结果也一样,即使查询结果只有十几万,处理起来也比较影响性能。也有另外一个方案是每个数据源只取前500条数据来合并,因为在搜索引擎中,越后面的数据是越不符合要求的,这样结果集最多就只有几千条数据,然后对结果集来分页。实际上这是一种丢数据的方案,感觉不太好。个人以为折中的方案就是每个数据源按一定比例去取数据,比如博客取5条、视频5条、新闻5条、问答5条,然后凑成每页20条。

不知道 elasticsearch 对不对你胃口。。。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题