以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端

  1. 安装mongodb

如果没有安装mongodb,则

sudo apt-get install mongodb

注意这样安装的mongodb版本是2.4.9,当时没注意,后来才傻眼了,偷懒的后果,没办法升级太麻烦,将就用,最好是下载源码安装,这里就不说了

  1. 开启复制集
    先停掉mongodb服务
sudo pkill mongod

MongoDB 必须开启复制集,通过–replSet设置副本,开启mongodb

sudo mongod --replSet rsEs --config /etc/mongodb.conf
  1. 初始化副本集
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 &

遇到的坑

  1. 索引问题

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了

  1. json问题
    这里写图片描述
    这个问题把我折腾的都怀疑人生了,问题出在最后一个字段的逗号上,把逗号去掉就ok了

  2. 重建索引问题
    发现自动建立的索引不是太合理,比如数字类型全部建成了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"        }    ]}'
原创粉丝点击