“工欲善其事,必先利其器。”要想了解Elasticsearch,要从该软件的安装入手。Elasticsearch的安装非常简单,几乎是“开箱即用”的。当然,前提是需要先下载JDK,并配置相应的环境变量,同时确保系统可用内存大于2GB。
Tips: 建议使用JDK7或JDK8,低版本的JDK会对Elasticsearch的使用造成不利影响;建议设置JAVA_HOME环境变量。
下面对Elasticsearch的安装进行说明。进入Elasticsearch官网http://www.elasticsearch.org,找到对应的Elasticsearch软件版本下载。如果是在Windows系统下使用,可以下载ZIP格式的安装包。对于工程开发人员来说,往往需要在Elasticsearch软件中集成一些其他插件和工具等。因此,建议初学者可以首先从Elasticsearch的RTF版本入手。可以到https://github.com/medcl/elasticsearch-rtf去下载Elasticsearch的RTF版本。
Tips: RTF是Ready To Fly的缩写,这是一个集成了基本插件(如服务封装、中文分词、mapper-attachments、transport-thrift、tools.carrot2等插件)的并带有示例程序的可直接上手的简易工程版本。
解压后会看到其目录结构。Elasticsearch包含的主要文件夹及功能如下(以RTF版为例):
Tips: 如果Elasticsearch运行在专用服务器上,一般经验是分配一定的内存给Elasticsearch,可以通过修改ES_HEAP_SIZE环境变量来改变这个设定,它控制堆大小。在启动Elasticsearch之前应该把这个变量改到预期值。关于这个数据的设置可参见相关手册。一般来说,如果在日志文件中发现带有OutOfMemoryError错误的输出记录,则应考虑将环境变量ES_HEAP_SIZE取值调大,建议该值不应超过总可用物理内存的50%(剩余内存可用作高速缓存,提高检索性能),这样可以极大地提高搜索性能 [12] 。
可选择Elasticsearch使用的中文分词器。打开config/elasticsearch.yml文件(注:yml是一种简单的数据描述语言,语法比XML简单,适合用来表达或编辑数据结构,并完成各种设定等)。在这个文件中的index.analysis.analyzer.default.type部分指定使用的中文分词器。代码段1.1是选择使用IK分词器并对其进行设置(注:在Elasticsearch、Logstash、Kibana等相关的配置文件中用#表示注释信息。为便于统一表述形式,本书多用//表示注释说明信息,仅在第7章有时用#表示注释说明信息)。
//代码段1.1:在elasticsearch.yml中设置中文分词算法
index: analysis: analyzer: ik: alias: -ik_analyzer type: org.elasticsearch.index.analysis.IkAnalyzerProvider ik_max_word: type:ik use_smart: false ik_smart: type: ik use_smart: true index.analysis.analyzer.ik.type: ik index.analysis.analyzer.default.type: ik
Tips: 在文本被索引前需要经过分词处理,这项工作一般由Analyzer类完成。Analyzer类是个抽象类,对应不同语言的文本,应该从Analyzer派生出特定的Analyzer。IK Analyzer是一个开源的基于Java语言开发的轻量级的中文分词工具包。最初它是以开源项目Lucene为应用主体的、结合词典分词和文法分析算法的中文分词组件。从IK Analyzer 3.0起,发展为面向Java的公用分词组件,且独立于Lucene项目。另外,yml配置文件多数内容是被#注释起来的,需要修改某部分时,可以删掉注释标记并进行相关的配置即可。yml内容要求严格执行规定的缩进格式。
进入Elasticsearch的bin文件夹,运行elasticsearch.bat文件,启动Elasticsearch。
Tips: 若关闭Elasticsearch,可在shell环境输入命令(Elasticsearch默认占用9200端口):
curl -xPOST http://localhost:9200/_cluster/nodes/_shutdown
之后,打开浏览器,输入http://locaohost:9200,会显示类似图1.1的内容。其中:
图1.1 Elasticsearch启动后的界面
图1.1中出现了JSON格式的数据。JSON(JavaScript Object Notation)是基于Javascript的轻量级的数据交换格式,是独立于语言的文本格式。在Javascript中,处理JSON数据不需要任何特殊的API或工具包。利用JSON可简单地表示半结构化数据,而且目前多数编程语言支持对JSON数据的解析。JSON的基本语法表示是:
如下的代码是对同样数据的XML和JSON表示形式。JSON和XML的可读性可谓不相上下,但在Javascript范围内,JSON优势要大于XML。在Elasticsearch应用中,可以在很多地方看到JSON的身影。
XML示例代码:
<?xml version="1.0" encoding="utf-8"?> <book> <name>Elasticsearch Searching</name> <author> <name>Gao</name> <sex>male</sex> <age>45</age> <country>China</country> </author> <price>10</peice> </book>
JSON示例代码:
{ "book": { "name": " Elasticsearch Searching ", "author": { "name": "Gao", "sex": "male", "age": 45, "country": "China" }, "price": 10, } }
Tips: Elasticsearch的配置文件中,elasticsearch.yml负责设置服务器的默认配置;logging.yml定义了多少信息写入系统日志、定义日志文件,并定期创建新文件,当需要适配监视环境或备份解决方案,抑或在系统调试时,可能需要更改该文件。