使用mongodb作为数据源搭建solr搜索引擎之创建同步索引实现

以下程序使用solr作为搜索模块,搜索关键的第一步是创建索引。索引的产生我们一般是通过数据库中的数据作为数据源。但是数据库中的数据是时时变化的,数据库的数据变化了怎么同步索引到solr呢。以下程序就是解决这个问题。mongo数据库发生变化后通过使用github上开源的项目mongo-connector作为工具,该项目可以时时检测数据库的改变从而和solr配合实现同步索引的目的。


一:配置solr


使用的solr版本是solr 4.5.1

1)解压zip
2)将d:/solr-4.5.1/example/webapps下的solr.war拷贝到tomcat–>weapps中
3)新建文件夹d:/sorl_home,将d:/solr-4.5.1/example/solr目录拷贝至d:/sorl_home中
4)启动tomcat,此时tomcat会把solr.war进行解压,生成一个solr文件夹;停止tomcat,删除solr.war。

运行tomcat后访问:http://localhost:8080/solr

5)修改schema.xml配置文件中的id为_id:


二:配置mongodb


1)开启oplog,还需要在Mongo中启动一个replica set

我的MONGO_HOME为 D:\mongodb

    目录树如下:

    -rs  (d)

    |----db  (d)  mongo数据文件文件存放的目录

      |----rs1  (d)  rs1实例数据文件存放的目录

      |----rs2  (d)  rs2实例数据文件存放的目录

    |----log  (d)  log文件存放的目录

      |----rs1.log  (f)  rs1实例的log文件

      |----rs2.log  (f)  rs2实例的log文件

    |----mongod-rs1.bat  rs1实例的启动脚本

    |----mongod-rs2.bat  rs2实例的启动脚本


mongod-rs1.bat内容如下:    

    D:\MongoDB\mongod --port 27001 --oplogSize 100 --dbpath db\rs1 --logpath log\rs1.log --replSet rs/127.0.0.1:27002 --journal
    pause

    mongod-rs2.bat内容如下:   

    D:\MongoDB\mongod --port 27002 --oplogSize 100 --dbpath db\rs2 --logpath log\rs2.log --replSet rs/127.0.0.1:27001 --journal
    pause

2)执行两个脚本,启动两个mongod实例

3)但这时它们还没组成一个replica set,还需要进行配置,开启mongo,连上localhost:27001,也就是实例rs1


配置完成后:
查看rs.initiate(config)    rs.status()

三:启动mongo-connector

github地址(https://github.com/10gen-labs/mongo-connector)

D:\项目资料\dht\mongo-connector-master\mongo-connector-master\mongo_connector>py
thon connector.py -m localhost:27001 -t http://localhost:8080/solr/collection1 -
o oplog_progress.txt -n test.foo -u _id -d ./doc_managers/solr_doc_manager.py

python connector.py -m localhost:27001 -t http://localhost:8080/solr/collection1 -o oplog_progress.txt -n torrentinfo-db.torrent_info -u _id -d ./doc_managers/solr_doc_manager.py

注意其中-n参数为要进行索引的数据库表名称

四:测试

在mongo中添加一条记录:

 db.foo.insert({title:'hello world'})

在mongo-connector中会输出:

2014-07-26 23:18:42,881 - INFO - Finished 'http://localhost:8080/solr/collection
1/update/?commit=false' (post) with body 'u'<add><do' in 295.228 seconds.

在solr中进行查询即可:


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Spring Boot中使用MongoDB切换数据源,可以通过创建多个MongoDB的连接配置和使用`@Qualifier`注解来实现。下面是具体的步骤: 1. 配置多个MongoDB连接信息 在`application.properties`文件中,配置多个MongoDB连接信息,例如: ``` # MongoDB1 spring.data.mongodb1.uri=mongodb://localhost:27017/db1 spring.data.mongodb1.database=db1 spring.data.mongodb1.authentication-database=admin spring.data.mongodb1.username=user1 spring.data.mongodb1.password=password1 # MongoDB2 spring.data.mongodb2.uri=mongodb://localhost:27017/db2 spring.data.mongodb2.database=db2 spring.data.mongodb2.authentication-database=admin spring.data.mongodb2.username=user2 spring.data.mongodb2.password=password2 ``` 2. 创建多个MongoDB的连接配置 创建多个MongoDB的连接配置类,例如: ``` @Configuration @EnableMongoRepositories(basePackages = "com.example.db1.repositories", mongoTemplateRef = "mongoDb1Template") public class MongoDb1Config { @Bean(name = "mongoDb1Template") public MongoTemplate mongoTemplate(@Qualifier("mongoDb1Factory") MongoDbFactory mongoDbFactory) { return new MongoTemplate(mongoDbFactory); } @Bean(name = "mongoDb1Factory") public MongoDbFactory mongoDbFactory() { MongoClientURI uri = new MongoClientURI("mongodb://localhost:27017/db1"); MongoClient mongoClient = new MongoClient(uri); return new SimpleMongoDbFactory(mongoClient, "db1"); } } @Configuration @EnableMongoRepositories(basePackages = "com.example.db2.repositories", mongoTemplateRef = "mongoDb2Template") public class MongoDb2Config { @Bean(name = "mongoDb2Template") public MongoTemplate mongoTemplate(@Qualifier("mongoDb2Factory") MongoDbFactory mongoDbFactory) { return new MongoTemplate(mongoDbFactory); } @Bean(name = "mongoDb2Factory") public MongoDbFactory mongoDbFactory() { MongoClientURI uri = new MongoClientURI("mongodb://localhost:27017/db2"); MongoClient mongoClient = new MongoClient(uri); return new SimpleMongoDbFactory(mongoClient, "db2"); } } ``` 3. 在DAO层使用`@Qualifier`注解 在DAO层使用`@Qualifier`注解指定使用哪个MongoDB连接,例如: ``` @Repository public class UserRepository { @Autowired @Qualifier("mongoDb1Template") private MongoTemplate mongoDb1Template; @Autowired @Qualifier("mongoDb2Template") private MongoTemplate mongoDb2Template; public void saveUser1(User user) { mongoDb1Template.save(user); } public void saveUser2(User user) { mongoDb2Template.save(user); } } ``` 这样就可以在DAO层通过`@Qualifier`注解来切换不同的MongoDB连接了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值