(部分内容转载)
【前提:】
目前大部分的数据库在提取数据方面是非常薄弱的,虽然它们可以通过时间戳或相关的数值来进行内容的筛选,但是它们无法在全文搜索的同时做到同义词或相关性的搜索,它们也无法获取相同内容的数据。这个看着很有意思,就像我们的搜索引擎,肯定跟一个小小管理系统中的条件搜索不一样,更何况,面对如此巨大的数据量,一个普通的管理系统中能做的无非就是数据表结构进行调整,或者SQL语句进行优化,而对于实时性的问题,数据量级别达到一定程度,就立马傻眼了。以上这些都是ES突出的原因,
我现在的项目并没有用ES,但作为一个高效、实时的分布式搜索、分析引擎,而且它可以帮助你浏览并利用那些已经快要烂在数据库里那些极难查询的数据。所以,你给自己一个不得不学习的理由。
【介绍:】
Elasticsearch是一个基于Lucene的搜索服务器,可以说是基于Lucene开发的一个搜索服务器应用。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。ElasticSearch是用java开发的,并作为Apache许可条款下的开放源码发布,是当前流向的企业级搜索引擎,能够达到实时搜索、稳定、可靠、快速,安装使用方便。它可以帮助你用前所未有的速度去处理大规模数据,并可以用全文搜索、结构化搜索以及分析或将三者综合使用去查询庞大的数据。
应用:
稍微提一下它的应用,作为额外了解,也顺便看看都哪些神奇的应用在应用ES
维基百科使用ES来进行全文搜索并高亮显示关键词,以及提供search-as-you-type、did-you-mean等搜索建议功能
英国卫报使用ES来处理访客日志,以便能将公众对不同文章的反应实时的反馈给各位编辑
StackOverflow将全文搜索与地理位置和相关信息进行结合,以提供more-like-this相关问题的展现
GitHub使用ES来检索超过1300亿行代码
每天Goldman Sachs用来ES来处理5TB数据的索引,还有很多同行使用它来分析股票市场的变动
ES并不只是面向大型企业的,它还帮助了很多类似DataDog以及Klout的创业公司进行了功能的扩展。ES可以运行在你的笔记本上,也可以部署到成千上万的服务器上,处理PB级别的数据。解释一下PB级别数据的概念,你一定很熟悉TB了,比如我的硬盘是2T,1TB等于2的40次方,1PB呢就是2的50次方,可见ES能够处理的数据量级别之大。
功能:
当然了,要说说ES的功能,不仅仅是检索这么简单,系统的来说一下吧
分布式实时文件存储,并将每个字段都编入索引,使其可以被搜索
实时分析的分布式搜索引擎
可以扩展到上百台服务器,处理PB级别的结构化或非结构化数据
配置文件:
cluster.name: elasticsearch
#这是集群名字,我们 起名为 elasticsearch
#es启动后会将具有相同集群名字的节点放到一个集群下。
node.name:"es-node1"
#节点名字。
discovery.zen.minimum_master_nodes:2
#指定集群中的节点中有几个有master资格的节点。
#对于大集群可以写3个以上。
discovery.zen.ping.timeout:40s
#默认是3s,这是设置集群中自动发现其它节点时ping连接超时时间,
#为避免因为网络差而导致启动报错,我设成了40s。
discovery.zen.ping.multicast.enabled:false
#设置是否打开多播发现节点,默认是true。
network.bind_host:192.168.137.100
#设置绑定的ip地址,这是我的master虚拟机的IP。
network.publish_host:192.168.137.100
#设置其它节点和该节点交互的ip地址。
network.host:192.168.137.100
#同时设置bind_host和publish_host上面两个参数。
discovery.zen.ping.unicast.hosts:["192.168.137.100", "192.168.137.101","192.168.137.100:9301"]
#discovery.zen.ping.unicast.hosts:["节点1的 ip","节点2 的ip","节点3的ip"]
#指明集群中其它可能为master的节点ip,
#以防es启动后发现不了集群中的其他节点。
#第一对引号里是node1,默认端口是9300,
#第二个是 node2 ,在另外一台机器上,
#第三个引号里是node3,因为它和node1在一台机器上,所以指定了9301端口。
#解决head插件跨域
http.cors.enabled: true
http.cors.allow-origin: "*"