实际公司后台管理系统中使用了elasticsearch作为首选搜索引擎,使用传统的mysql like的确给服务器造成了不少性能压力,目前根据项目业务需求使用elasticsearch设计出了多个index/mapping,更重要的是通过开源项目go-mysql-elasticsearch,可以看一下作者siddontang使用elasticsearch的初步意图和实现目的
前言
但是在实际生产环境中遇到的问题也不少,同步中断,字段新增同步异常等问题,网上很多声音说可以尝试选择elasticsearch-jdbc,但是生产环境elasticsearch的版本比较新,查看readme, 最新只支持到v2.3.4,担心同步程序会出问题所以放弃之
推荐web端elasticsearch-head本地连接es集群,实时查看集群节点状态和数据同步是否异常,随时查看对应的index/mapping数据。如果使用谷歌浏览器的话强烈推荐其Elasticsearch Head 扩展程序,填入server地址即可连接es集群
记下几个官方文档的命令
|
|
尝试解决数据不同步的问题
方案一 使用了网上不太成熟的npm包,顶一波mysql_2_elasticsearch,但是也有些许问题没能知道为什么,mysql表的自增 id自动替换为了表名+_id 的格式,如:users_id;但是对于异常捕获还是做得很好,预留可扩展配置exception_handler过滤不规则内容导致的同步失败问题,个人觉得还是很不错的,数据导入效率高,支持多张表同时导入。
方案二 安装composer包Maps Laravel Elasticquent,支持删除索引,新建索引,此类库依赖于官方elasticsearch包,只需要在配置文件中配置index以及server-domain,即可通过model中配置的index以及type得到搜索结果。
项目小结
多途径解决问题,使用go-mysql-elasticsearch,方便实时,但是遇到字段更新,出现表数据同步中断的情况只好删除索引,删除data/master.info,重启go-mysql-elasticsearch
使用 Maps Laravel For Elasticquent,reindex相关type后,之前未同步的type出现了,框架的好处是自动过滤掉了已经被删除的数据,目前看来情况很好,数据正常同步!
关于go-mysql-elasticsearch的安装文档