学习应用 ElasticSearch,在 Docker 中搭建 ES 服务

由于近期工作内容中需要做一些关于搜索方面的工作,一直以来,搜索这块的技术选型心里都有以下几个

  1. 基于 Sphinx 的小型快速的全文件检索的服务
  2. 基于 Lucene 的服务 ( 包括 C 现实与 Java 实现的版本 )    1. Solr
  3. Nutch
  4. ElasticSearch
  5. 其它实现
  6. 定制开发

最终决定使用 ElasticSearch 作为技术框架,并在此基础上进行一些实践和开发。

选择 ElasticSearch 的原因如下:

1. 完全基于 Lucene,毕竟 Java Lucene 在开源搜索项目中是最为成熟的一套方案

  1. “天生”有良好的分布式基因,ES 在设计之初目标就定位于分布式的服务环境,给架构的横向扩展提供了坚实的基础3. 完成的插件体系和开发扩展架构,方便使用者基于ES进行定制开发
  2. 社区活跃,成功案例较多,这将为后期的定制开发和维护管理大大地减少成本
  3. 中文分词多,社区中能找到很多知名的中文分词器,这也极大地降低了后期的研发成本

说到中文分词器,在ES中比较流程的几个就是

  1. IK
  2. mmSeg
  3. Ansj

具体的比较请大家自行 google 喽。


搜索服务选定了,需要做一些技术体系方面的了解,当然,这篇只介绍快速拿到一个原型,并进行一些技术的初步探索。

了解一项技术最好的方法就是去尝试

安装 ES

我选择使用 docker 来安装,前后找了三套

  1. 官方的 ES 镜像
  2. goofansu/elasticsearch-ik
  3. liukaitj/elasticsearch-ik-pinyin-docker

PS : 2016-01-10 hub.docker.com 的 镜像服务出现故障,无法正常使用

这三套镜像如果大家有时间,都可以自己体验一下

最后我选择了 liukaitj/elasticsearch-ik-pinyin-docker 作为了解 ES 使用的镜像,这是一个很好的尝试环境,因为内部集成了 Head , BigDesk 这样的可视化插件工具,而且还集成了上面说的最主流、最常见的 3 个分词器。这样对了解这个系统将起到很好的作用。

不过作者在发布这个镜像的时候,好像不是太细心,存在一个入口脚本的权限问题。解决办法请移步Issue

用了一会,出现一个小问题,就是我的内存分配的太小了,这个镜像里ik需要加载的词库比较多,所以建议给运行 Docker 的机器,内存大些,至少 2G 才能顺利地玩下来吧。