以mongodb为数据源搭建ElasticSearch
来源:互联网 发布:自拍神器软件下载 编辑:程序博客网 时间:2024/06/04 18:06
由于项目中数据量太大,直接查询很慢,建立索引开销也挺大,所以考虑搭建个搜索引擎,考虑过solr,sphinx,最终还是选择了es,原因在于mongodb到es有一个现成的中间件mongo-connector,当然solr也可以用这个,不过ES貌似更有朝气点,主要是配置更简单,原谅我都没用过。。。第一次只能选择最简单的
好了闲话休提,说正事。
服务器
14.04.1-Ubuntu 内存8G 4核CPU,有点可怜。。
java环境
es是java开发的,所以需要配置java环境,因为es5x,所以装个java8
sudo add-apt-repository ppa:webupd8team/javasudo apt-get updatesudo apt-get install oracle-java8-installersudo apt-get install oracle-java8-set-default
安装ElasticSearch
wget -qO - https://packages.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -echo "deb http://packages.elastic.co/elasticsearch/1.6/debian stable main" | sudo tee -a /etc/apt/sources.listsudo apt-get updatesudo apt-get install elasticsearchsudo update-rc.d elasticsearch defaults 95 10
mongo端
- 安装mongodb
如果没有安装mongodb,则
sudo apt-get install mongodb
注意这样安装的mongodb版本是2.4.9,当时没注意,后来才傻眼了,偷懒的后果,没办法升级太麻烦,将就用,最好是下载源码安装,这里就不说了
- 开启复制集
先停掉mongodb服务
sudo pkill mongod
MongoDB 必须开启复制集,通过–replSet设置副本,开启mongodb
sudo mongod --replSet rsEs --config /etc/mongodb.conf
- 初始化副本集
liurh@ubuntuNas02:~$ mongoMongoDB shell version: 2.4.9connecting to: testWelcome to the MongoDB shell.For interactive help, type "help".> rs.initiate(){ "info2" : "no configuration specified. Using a default configuration for the set", "me" : "b48eafd69929:27017", "ok" : 1}
安装mongo-connector
mongo-connector工具是基于python开发的实时同步服务工具,该工具在MongoDB与目标系统间同步数据,并跟踪MongoDB的oplog,保持操作与MongoDB的实时同步。 它要求mongo运行在replica-set模式,且需要 elastic2_doc_manager将数据写入ES。
github地址:https://github.com/mongodb-labs/mongo-connector/wiki/Usage%20with%20ElasticSearch
我们ES用的是Elasticsearch 5.x,所以对应安装
sudo pip install 'mongo-connector[elastic5]'
如果提示pip没装,则先安装pip
sudo apt-get install python-pip
安装elastic2-doc-manager
sudo pip install elastic2-doc-manager
启动mongo-connector
sudo mongo-connector -m localhost:27017 -t localhost:9200 -d elastic2_doc_manager &
遇到的坑
- 索引问题
ES会自动对mongodb的数据在建立索引,所以这里有个坑:
因为mongodb的特性,同一个字段在不通的文档里可能是不同的数据类型,所以,假如索引中对该字段建立数据类型integer,但是有些数据是string,强制类型转换不了,则会报错
解决办法是关闭自动创建,手动创建索引,/etc/elasticsearch/elasticsearch.yml文件中
action.auto_create_index: false
手动创建索引,把那个字段改为string类型
curl -XPOST "http://127.0.0.1:9200/wechat_nas/wechat_db/_mapping?pretty" -d '{ "wechat_db": { "properties": { "create_at": { "type": "long" }, "secret": { "type": "string" }, "url": { "type": "string" }, "wid": { "type": "string" } } }}'
重启因报错而退出的进程mongo-connector,这样就ok了
json问题
这个问题把我折腾的都怀疑人生了,问题出在最后一个字段的逗号上,把逗号去掉就ok了重建索引问题
发现自动建立的索引不是太合理,比如数字类型全部建成了long, 我想改成byte,才发现字段特么只能增,不能改,如果要改,只能删除索引,重建,我晕。。。
查了下资料,也可以用索引别名去无缝重建然后切换,不过我就直接删除重建了
常用ElasticSearch操作
#查看mappingcurl -XGET "http://127.0.0.1:9200/wechat_nas/resource/_mapping?pretty"#创建mappingcurl -XPOST "http://127.0.0.1:9200/wechat_nas/message"#删除curl -XDELETE "http://127.0.0.1:9200/wechat_nas/message"#修改mappingcurl -XPOST "http://127.0.0.1:9200/wechat_nas/wechat_db/_mapping?pretty" -d '{ "wechat_db": { "properties": { "type":{ "type":"long" } } } }'#清空所有数据curl -XDELETE "http://127.0.0.1:9200/wechat_nas/wechat_db/_query" -d '{ "query" : { "match_all" : {} } }'#查询范围内数据curl -XGET http://127.0.0.1:9200/wechat_nas/rcontact/_search?pretty -d '{ "query" : { "range" : { "utime":{ "gte":1507685559 } } }}'#模糊查询curl -XGET http://127.0.0.1:9200/wechat_nas/rcontact/_search?pretty -d '{ "query" : { "match" : {"username":"ELLA"} }}'#分页查询curl -XGET http://127.0.0.1:9200/wechat_nas/message/_search?from=0&size=10#查询数量curl -XGET http://127.0.0.1:9200/wechat_nas/message/_count?pretty -d '{ "query" : { "match" : {"wid":"XD6718"} }}'#精确查找curl -XGET http://127.0.0.1:9200/wechat_nas/message/_count?q=wid:XD6718curl -XGET http://127.0.0.1:9200/wechat_nas/message/_search?pretty -d '{ "from" : 0, "size" : 10, "query" : { "term" : {"wid":"XD6718"} }, "sort": [ { "createTime": "desc" } ]}'
- 以mongodb为数据源搭建ElasticSearch
- sparkSQL以JDBC为数据源
- JBOSS配置数据源,以mysql为例
- 以mysql为数据源的Solr配置
- Nutch+MongoDB+ElasticSearch+Kibana 搭建搜索引擎
- Nutch+MongoDB+ElasticSearch+Kibana 搭建搜索引擎
- ElasticSearch--以属性为中心的查询
- PowerBuilder 11.5 以WebService为数据源生成数据窗口
- EJB数据源的配置(以JBoss为例)
- Solr DIH以Mysql为数据源批量创建索引
- 单机搭建elasticsearch和mongodb river的数据同步
- redash添加elasticsearch数据源
- hibernate配置多个数据源及事物(以两个数据源为例)
- hibernate配置多个数据源及事物(以两个数据源为例)
- hibernate配置多个数据源及事物(以两个数据源为例)
- webservice的搭建(以cxf为例)
- Java环境搭建,以win10为例
- Java环境搭建,以win10为例
- [境内法规]人民银行关于印发《金融机构反洗钱监督管理办法(试行)》的通知—银发〔2014〕344号
- android通讯录开发<一> 导出数据库
- js中apply和call理解
- ArcGIS水文分析实战教程(12)河网分级流程
- 今天的学习心得
- 以mongodb为数据源搭建ElasticSearch
- java中换行字符怎么用?
- java集合讲解
- 1Android APK瘦身
- MySQL索引原理及慢查询优化
- Android studio编译安装到小米5手机上,每次手机都要弹窗重新安装apk
- Android中属性动画和补间动画的区别
- Maven讲解之 POM.XML
- C# 中的var关键字