前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >solr or es 结合弥补mongodb的全文检索功能

solr or es 结合弥补mongodb的全文检索功能

作者头像
猿天地
发布2018-04-03 10:31:26
1.9K0
发布2018-04-03 10:31:26
举报
文章被收录于专栏:猿天地

最近将公司的solr集群升级到了最新的6.5版本。

之前用了N年的是3点多的版本,那个时候solr还不支持自带的集群,集群方式都是自己实现的。

公司里用的最多的数据库就是mongodb了,大数据量存储,天生集群支持,分片更简单。

mongodb唯一不足的就是全文检索的能力,不过大部分公司都是用的搜索框架来单独提供搜索服务的。

下面介绍下mongodb怎么结合solr或者es来做搜索。

建索引方案一

solr或者es部分只存储需要搜索的索引和数据的主键ID。比如根据标题搜索,那么只建立标题索引。存储部分只存主键ID。

这样只要标题做了修改,需要更新标题索引即可。

更新可以在更新的业务接口中将更新索引的操作放入队列来进行建索引操作。(或者直接在业务方法中更新,这样耦合度太高,使用队列耦合低,但是索引更新会稍有延迟)

建索引方案二

solr或者es将存储所有数据,标题建索引,其他字段只做存储。

更新时需要更新所有字段。

建索引方案三

使用mongo-connector进行索引同步

当然在使用mongo-connector的时候一定要使用副本集的方式。

因为mongo-connector的原理就是监听mongodb的oplog来进行索引的同步更新。

单节点是没有操作oplog的。

搜索方案一

在搜索接口中调用solr进行搜索,如果我们只存了主键ID,那么拿到搜索的结果的数据ID对mongodb进行in查询,组装数据返回给调用方。

如果我们存储了所有字段,那么其实相当于把solr或者es当成数据库在用了,搜索的结果可以直接返回给调用方,不用经过mongodb,此时mongodb只作为一个元数据存储使用。

搜索方案二

这种方案正式我公司在使用的,原理是我们基于mongodb的协议开发了一个代理框架。

这么说可能大家不太理解,如果有用过数据库中间件mycat的同学肯定就有点印象了。

就是跟mycat一样,mycat是基于mysql协议来封装的。

对于用户来说就是可以把mycat当做一个mysql来用,mycat后面其实有多台mysql的节点,但是对于使用方来说就只有一个,屏蔽了分库分表的细节部分。

我们这个也是这样的原理,对于使用方来讲就是一个mongodb。

可以执行mongodb的所有操作,当然需要配置哪些字段需要做全文检索操作,需要分词等等。

一旦用到这个字段进行搜索的时候,框架会自动去solr或者es进行搜索,然后封装数据返回给调用方,对调用方来说是透明的,它不知道背后还去查了solr。

当然建索引也是如此,在数据插入,更新,删除的时候会实时同步索引,这样就不需要在业务中或者队列中来同步索引,在使用放看来我就是更新了mongodb的数据,其实这个时候也更新了索引。


这边只是给大家一些思路,如果不封装框架,用起来会麻烦些

如果封装框架,用起来会简单些,难度就在写框架的这个过程中了

以上思路,仅供参考。。。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-06-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 猿天地 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 建索引方案一
  • 建索引方案二
  • 建索引方案三
  • 搜索方案一
  • 搜索方案二
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档