介绍
ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。
我们建立一个网站或应用程序,并要添加搜索功能,但是想要完成搜索工作的创建是非常困难的。我们希望搜索解决方案要运行速度快,我们希望能有一个零配置和一个完全免费的搜索模式,我们希望能够简单地使用JSON通过HTTP来索引数据,我们希望我们的搜索服务器始终可用,我们希望能够从一台开始并扩展到数百台,我们要实时搜索,我们要简单的多租户,我们希望建立一个云的解决方案。因此我们利用Elasticsearch来解决所有这些问题及可能出现的更多其它问题。
关系型数据库和非关系型数据库的特性以及各自的优缺点
数据库 类型 |
特性 | 优点 | 缺点 |
关系型数据库 SQLite、Oracle、mysql |
1、关系型数据库,是指采用了关系模型来组织 数据的数据库; 2、关系型数据库的最大特点就是事务的一致性; 3、简单来说,关系模型指的就是二维表格模型, 而一个关系型数据库就是由二维表及其之间的联系所组成的一个数据组织。 |
1、容易理解:二维表结构是非常贴近逻辑世界一个概念,关系模型相对网状、层次等其他模型来说更容易理解; 2、使用方便:通用的SQL语言使得操作关系型数据库非常方便; 3、易于维护:丰富的完整性(实体完整性、参照完整性和用户定义的完整性)大大减低了数据冗余和数据不一致的概率; 4、支持SQL,可用于复杂的查询。 |
1、为了维护一致性所付出的巨大代价就是其读写性能比较差; 2、固定的表结构; 3、高并发读写需求; 4、海量数据的高效率读写; |
非关系型数据库 MongoDb、redis、HBase |
1、使用键值对存储数据; 2、分布式; 3、一般不支持ACID特性; 4、非关系型数据库严格上不是一种数据库,应该是一种数据结构化存储方法的集合。 |
1、无需经过sql层的解析,读写性能很高; 2、基于键值对,数据没有耦合性,容易扩展; 3、存储数据的格式:nosql的存储格式是key,value形式、文档形式、图片形式等等,文档形式、图片形式等等,而关系型数据库则只支持基础类型。 |
1、不提供sql支持,学习和使用成本较高; 2、无事务处理,附加功能bi和报表等支持也不好; |
注1:数据库事务必须具备ACID特性,ACID是Atomic原子性,Consistency一致性,Isolation隔离性,Durability持久性。
注2:数据的持久存储,尤其是海量数据的持久存储,还是需要一种关系数据库。
其实,elasticsearch 也是一个NoSQL数据库,但是,elasticsearch 、MySQL、NoSQL各有长处与业务场景,都无法完全取代。
为什么不使用MongoDB,而是elasticsearch?因为业务场景不同,比如:elasticsearch是着重搜索,对增删改用的不多,所以,update之类的操作,就会有所削弱,转而增强查找功能。
安装
安装Java JDK
elasticsearch基于Java开发,所以要安装JDK,版本要求Java8及以上。安装教程网上寻找。
安装elasticsearch-rtf
elasticsearch-rtf是基于elasticsearch,针对中文集成了相关插件,方便新手学习测试。
1、运行环境
- a.JDK8+
- b.系统可用内存>2G
2、下载
git clone git://github.com/medcl/elasticsearch-rtf.git -b master --depth 1
3、运行
cd elasticsearch/bin
:进入elasticsearch的bin文件夹;
elasticsearch.bat
:运行elasticsearch.bat即可
4、内存不足报错
打开配置存放路径:elasticsearch-rtf\config\jvm.options,打开jvm.options,修改内存为256MB,如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
################################################################ ## IMPORTANT: JVM heap size ################################################################ ## ## You should always set the min and max JVM heap ## size to the same value. For example, to set ## the heap to 4 GB, set: ## ## -Xms4g ## -Xmx4g ## ## See https://www.elastic.co/guide/en/elasticsearch/reference/current/heap-size.html ## for more information ## ################################################################ # Xms represents the initial size of total heap space # Xmx represents the maximum size of total heap space # 原始值 #-Xms2g #-Xmx2g # 修改值 #-Xms256m #-Xmx256m |
-Xms
、-Xmx
的值必须一致。
5、浏览器访问127.0.0.1:9200
如果出现这个json数据,则elasticsearch安装成功。
安装head插件
head插件类似于MySQL的PHPMyAdmin,通过网页提供管理数据库的界面的工具。head插件是用来管理elasticsearch (它也是一个NoSQL),通过网页操作elasticsearch 的工具。GitHub地址:https://github.com/mobz/elasticsearch-head。
安装前,需要先安装git和npm。自己找教程。
安装步骤:
git clone git://github.com/mobz/elasticsearch-head.git
cd elasticsearch-head
npm install
npm run start
open
http://localhost:9100/
访问:http://localhost:9100/得到下图:
会发现,elasticsearch的http://127.0.0.1:9200/是可以访问的,但是head插件却不能连接成功,这是因为elasticsearch有安全策略,不允许外部第三方的软件访问内部,而head插件是第三方插件。要解决这个问题,可以到elasticsearch的elasticsearch.yml配置文件,修改安全策略。
1、修改elasticsearch安全策略
打开elasticsearch-rtf\config
,打开配置文件elasticsearch.yml
,在末尾添加:
1 2 3 4 |
http.cors.enabled: true http.cors.allow-origin: "*" http.cors.allow-methods: OPTIONS, HEAD, GET, POST, PUT, DELETE http.cors.allow-headers: "X-Requested-With, Content-Type, Content-Length, X-User" |
重新启动elasticsearch,再访问head插件http://localhost:9100/即可成功连接。
安装kibana
打开https://www.elastic.co/cn/downloads/kibana,你会看见kibana的下载页面,但是留意kibana的版本号,这个需要和Elasticsearch的版本号一致,我们可以在下载页面找到“ past releases”的文字连接,点击进去,去寻找与Elasticsearch的版本号一致的kibana。
我这里的Elasticsearch的版本号为:5.1.1,所以,找到“Kibana 5.1.1”点击进去,去选择符合你的系统的kibana,下载下来。
下载后,把压缩包解压,找个地方放置,我把它放在了D:\
盘下面:
进入kibana-5.1.1-windows-x86的bin文件夹:D:\kibana-5.1.1-windows-x86\bin
,运行kibana.bat
文件,会打印出信息,其中会有kibana服务的本地访问网址,打开它,就可以进入kibana的界面。
进入kibana,首先你会看到一个配置页面,其实是叫你配置Elasticsearch的索引名称:
其实,我们这里用到的是“Dev Tools”这个栏目。
首次使用kibana的时候,我们需要点击“Get it work”这个按钮,才能进入工作界面。
这样,我们就可以在左窗口编写操作Elasticsearch的语句,右边是运行命令语句后的结果输出界面。