这里参考了Gitbook上面中文翻译的https://www.gitbook.com/book/fuxiaopang/learnelasticsearch/details。也就是ElasticSearch权威指南。自己觉得现在正面临的问题,也就是在文档中说的:已经被数据淹没,我们创造的系统产生的数据可以瞬间轻而易举地将我们压跨。现在的科技只是致力于如何存储数据,并能将拥有大量信息的数据仓库结构化。而一旦我们想从大量的数据中得出结做做决策的时候,美好的一天就要被毁灭了。不可否认的是,没有数据分析,数据确实要成为一种负担了。所以,我们必须建立能够分析数据的工具,帮助我们从数据中得到知识,得到决策的依据。
ElasticSearch适用于全文搜索、结构化数据的实时统计。Elastic并不只是全文搜索,还具有结构化搜索,统计、查询过滤、地理定位、自动完成等。ElasticSearch也可以应用于生产的环境。所以对我们而言是比较合理的。自己理想中的文献检索,特别是学术文献检索系统,也应该就是这样的。个人感觉,希望ElasticSearch成为自己一生的小伙伴。
ElasticSearch安装之后会开启一个服务器,监听9200端口。类似于安装之后直接开启一个网页的应用程序现在变得越来越普遍了。可以说,任何一个分布式的软件,都集成了网页前端与Web Service的功能了。ElasticSearch采用分布式的设计。每个运行的ES(ElasticSearch的简称,下同)实例称为一个结点。具有相同的cluster.name的结点构成一个集群。同一集群下的结点协同工作,互相分享数据,提供了故障转移与扩展的功能。一个节点单独也可以进行工作。
ES的客户端有两类。一种是节点客户端,它以一个无数据节点的身份加入集群。这个节点不存放数据,但是节点本身由于知道什么数据在哪一个节点上,所以它可以执行转发的功能。另一类客户端是传输客户端。本身不是集群的一部分,但是可以把请求转发到集群中的结点。这两个客户端所使用的端口是9300。现在要求Java的客户端的版本号必须与ES节点所使用的版本号一样(这是Java类库的问题)。如果是其它的语言,可以通过9200端口上的REST服务与ES通信。
ES是面向文档的数据库。它不仅存储整个对象或者文档,而且还为他们建立索引,以便我们通过ES搜索。ES还在索引与搜索的基础上实现了排序与过滤的功能。学习使用ES的很基础的工作就是学会JSON与JSON上面的查询DSL。只有这样才能了解数据处理的功能是如何的。
但是从企业架构的角度考虑,搜索只是实现一种功能。建议的架构是,使用mongodb存储数据,然后借助于元数据挖掘工具,从文档中得到文本,把文本送到ES搜索。然后用户在点击的时候,直接返回一个文档即可。Solr与ES都是索引文档的内容。Solr对文档的索引有内部的支持,然而ES还需要一个插件。SOlr与ES都使用Tika作为元数据挖掘的工具。虽然Solr与ES都具有存储文档的功能,然而目前非常不推荐将它们作为主要的存储单元。甚至把原始文档放在本地文件系统中都比放在Solr或者ES中要好。在实现中,ES与Solr通过一些扩展都可以实现元数据存放的功能。(从实用的角度看,个人的文档管理系统确实应该是把存储与搜索放在一起。但是目前个人软件并不能赚钱,需求也不好定位,所以,实践中,都是按照企业的要求设计软件,因此不建议把存储和全文搜索都放在一起。)。总而言之,现状上,它们都支持Mongodb一样的二进制文件存储,经过一些配置也都可以实现文档的全文检索。但是不建议使用。
http://stackoverflow.com/questions/10854858/best-practices-for-searchable-archive-of-thousands-of-documents-pdf-and-or-xml/10861308#10861308上面介绍了搜索上千PDF或者XML文档的最佳实践。我们可以参考一下。要使文档都能够通过Web UI界面搜索,现在还存在文档格式复杂繁多的问题。但是对于一般的文档来说,实现“搜索PDF的哪一页具有什么样的文字”可能还是具有一些挑战的。可能为大多数的文档建立一个统一的模型,能够描述文本在文档中的位置、页数是比较迫切的。
ES可以通过附件的形式返回一个完整的文档。但是作为附件的话,可能没有全文搜索引擎的功能。因此比较好的解决的方案是使用Tika做预处理的工作,把文本与元数据挖掘出来,然后使用它进行搜索。在文本搜索的领域,可能目前也就只能这样的。但是我们知道目前的发展的趋势是很多的。比如,多媒体数据的搜索。Sunspot与RSolr这样的工具,对Solr做了进一步的封装,能够处理大多数的文档格式。为了保持性能,在70K这样的级别的程序中,把文本从PDF中挖掘出来,然后把文本存到SQL或ES中。这样在性能上也是可以接受的。