由于近期工作内容中需要做一些关于搜索方面的工作,一直以来,搜索这块的技术选型心里都有以下几个
- 基于 Sphinx 的小型快速的全文件检索的服务
- 基于 Lucene 的服务 ( 包括 C 现实与 Java 实现的版本 ) 1. Solr
- Nutch
- ElasticSearch
- 其它实现
- 定制开发
最终决定使用 ElasticSearch 作为技术框架,并在此基础上进行一些实践和开发。
选择 ElasticSearch 的原因如下:
1. 完全基于 Lucene,毕竟 Java Lucene 在开源搜索项目中是最为成熟的一套方案
2. “天生”有良好的分布式基因,ES 在设计之初目标就定位于分布式的服务环境,给架构的横向扩展提供了坚实的基础3. 完成的插件体系和开发扩展架构,方便使用者基于ES进行定制开发
4. 社区活跃,成功案例较多,这将为后期的定制开发和维护管理大大地减少成本
5. 中文分词多,社区中能找到很多知名的中文分词器,这也极大地降低了后期的研发成本
说到中文分词器,在ES中比较流程的几个就是
- IK
- mmSeg
- Ansj
具体的比较请大家自行 google 喽。
搜索服务选定了,需要做一些技术体系方面的了解,当然,这篇只介绍快速拿到一个原型,并进行一些技术的初步探索。
了解一项技术最好的方法就是去尝试
安装 ES
我选择使用 docker 来安装,前后找了三套
PS : 2016-01-10 hub.docker.com 的 镜像服务出现故障,无法正常使用
这三套镜像如果大家有时间,都可以自己体验一下
最后我选择了 liukaitj/elasticsearch-ik-pinyin-docker 作为了解 ES 使用的镜像,这是一个很好的尝试环境,因为内部集成了 Head , BigDesk 这样的可视化插件工具,而且还集成了上面说的最主流、最常见的 3 个分词器。这样对了解这个系统将起到很好的作用。
不过作者在发布这个镜像的时候,好像不是太细心,存在一个入口脚本的权限问题。解决办法请移步Issue
用了一会,出现一个小问题,就是我的内存分配的太小了,这个镜像里ik需要加载的词库比较多,所以建议给运行 Docker 的机器,内存大些,至少 2G 才能顺利地玩下来吧。