ElasticSearch
ES简介
Elasticsearch 是一个实时的分布式搜索分析引擎, 它能让你以一个之前从未有过的速度和规模,去探索你的数据。 它被用作全文检索、结构化搜索、分析以及这三个功能的组合。Elasticsearch 能运行在你的笔记本电脑上,或者扩展到上百台服务器上去处理PB级数据。
Elasticsearch 中没有一个单独的组件是全新的或者是革命性的。全文搜索很久之前就已经可以做到了, 就像早就出现了的分析系统和分布式数据库。 革命性的成果在于将这些单独的,有用的组件融合到一个单一的、一致的、实时的应用中。它对于初学者而言有一个较低的门槛, 而当你的技能提升或需求增加时,它也始终能满足你的需求。
不幸的是,大部分数据库在从你的数据中提取可用知识时出乎意料的低效。 当然,你可以通过时间戳或精确值进行过滤,但是它们能够进行全文检索、处理同义词、通过相关性给文档评分么? 它们从同样的数据中生成分析与聚合数据吗?最重要的是,它们能实时地做到上面的那些而不经过大型批处理的任务么?
这就是 Elasticsearch 脱颖而出的地方:Elasticsearch 鼓励你去探索与利用数据,而不是因为查询数据太困难,就让它们烂在数据仓库里面。
Elasticsearch 将成为你最好的朋友。
为了搜索
Elasticsearch 是一个开源的搜索引擎,建立在一个全文搜索引擎库 Apache Lucene™ 基础之上。 Lucene 可以说是当下最先进、高性能、全功能的搜索引擎库–无论是开源还是私有。
但是 Lucene 仅仅只是一个库。为了充分发挥其功能,你需要使用 Java 并将 Lucene 直接集成到应用程序中。 更糟糕的是,您可能需要获得信息检索学位才能了解其工作原理。Lucene 非常 复杂。
Elasticsearch 也是使用 Java 编写的,它的内部使用 Lucene 做索引与搜索,但是它的目的是使全文检索变得简单, 通过隐藏 Lucene 的复杂性,取而代之的提供一套简单一致的 RESTful API。
然而,Elasticsearch 不仅仅是 Lucene,并且也不仅仅只是一个全文搜索引擎。 它可以被下面这样准确的形容:
一个分布式的实时文档存储,每个字段 可以被索引与搜索
一个分布式实时分析搜索引擎
能胜任上百个服务节点的扩展,并支持 PB 级别的结构化或者非结构化数据
Elasticsearch 将所有的功能打包成一个单独的服务,这样你可以通过程序与它提供的简单的 RESTful API 进行通信, 可以使用自己喜欢的编程语言充当 web 客户端,甚至可以使用命令行(去充当这个客户端)。
就 Elasticsearch 而言,起步很简单。对于初学者来说,它预设了一些适当的默认值,并隐藏了复杂的搜索理论知识。 它 开箱即用 。只需最少的理解,你很快就能具有生产力。
随着你知识的积累,你可以利用 Elasticsearch 更多的高级特性,它的整个引擎是可配置并且灵活的。 从众多高级特性中,挑选恰当去修饰的 Elasticsearch,使它能解决你本地遇到的问题。
安装
先安装JAVA,Oracle版本或OpenJDK,版本8以上,并且设置JAVA_HOME及PATH。如果找不到JAVA,yum安装会失败,所以请先安装JAVA并设置路径。
导入PGP Key:
rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
再生成/etc/yum.repos.d/elasticsearch.repo,内容为:
[elasticsearch-6.x]
name=Elasticsearch repository for 6.x packages
baseurl=https://artifacts.elastic.co/packages/6.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
执行yum安装:
yum install -y elasticsearch
安装完成后编辑 /etc/sysconfig/elasticsearch 文件,在其中设置JAVA_HOME指向正确路径(默认配置文件这一项是被注释掉的),否则在启动时会报找不到java。
设置为自动启动并启动服务:
systemctl daemon-reload
systemctl enable elasticsearch.service
systemctl start elasticsearch.service
验证下状态:
# systemctl status elasticsearch
● elasticsearch.service - Elasticsearch
Loaded: loaded (/usr/lib/systemd/system/elasticsearch.service; enabled; vendor preset: disabled)
Active: active (running) since 一 2018-09-17 15:40:29 CST; 4min 4s ago
Docs: http://www.elastic.co
Main PID: 26170 (java)
Memory: 1.2G
CGroup: /system.slice/elasticsearch.service
├─26170 /usr/local/bin/java -Xms1g -Xmx1g -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly -XX:+AlwaysPreTouch -Xss1m -Djava.awt.headless=tru...
└─26255 /usr/share/elasticsearch/modules/x-pack-ml/platform/linux-x86_64/bin/controller
9月 17 15:40:29 pig systemd[1]: Started Elasticsearch.
9月 17 15:40:29 pig systemd[1]: Starting Elasticsearch...
验证安装
ElasticSearch默认配置下是监听9200端口,可以发起HTTP GET / 验证是否安装和启动成功:
http get http://localhost:9200/
HTTP/1.1 200 OK
content-encoding: gzip
content-length: 294
content-type: application/json; charset=UTF-8
{
"cluster_name": "elasticsearch",
"cluster_uuid": "Qwa8u9oaTw-8V0OQKa4UaQ",
"name": "TCsKc7g",
"tagline": "You Know, for Search",
"version": {
"build_date": "2018-08-17T23:18:47.308994Z",
"build_flavor": "default",
"build_hash": "595516e",
"build_snapshot": false,
"build_type": "rpm",
"lucene_version": "7.4.0",
"minimum_index_compatibility_version": "5.0.0",
"minimum_wire_compatibility_version": "5.6.0",
"number": "6.4.0"
}
}
配置文件
ElasticSearch共有3个配置文件:
- elasticsearch.yml Elasticsearch的配置文件
- jvm.options JVM设置配置文件
- log4j2.properties Elasticsearch本身的日志设置
在用RPM安装的场景,这几个文件都在/etc/elasticsearch目录下。
而系统相关的环境变量及启动相关设置则在/etc/sysconfig/elasticsearch文件中。
默认配置已经可以真正运行了,但为了更好的使用,我们还需要修改一些配置项:
打开/etc/elasticsearch/elasticsearch.yml文件,正如文件扩展名所暗示的那样,文件是yaml格式的。
大部分参数不需要调整,但下列配置建议按实际情况修改:
# 集群名称,默认是elasticsearch,建议改成更有意义的名称
cluster.name: es-cluster
# 节点名称,默认是随机产生的UUID头7位,建议也改为更有意义的名称
node.name: pig-node
# 数据存储路径
path.data: /var/lib/elasticsearch
# 日志存储路径
path.logs: /var/log/elasticsearch
# 绑定地址,默认是localhost,如果要对网络中其它机器开放,则需要指定机器IP
network.host: 192.168.198.46
索引创建
在Elasticsearch中,索引(index) 类似于传统关系数据库中的一个 数据库 ,是一个存储关系型文档的地方。
curl -X PUT "localhost:9200/megacorp/employee/1" -H 'Content-Type: application/json' -d'
{
"first_name" : "John",
"last_name" : "Smith",
"age" : 25,
"about" : "I love to go rock climbing",
"interests": [ "sports", "music" ]
}
'
在这条命令的路径中,包含多个信息:
- megacorp 索引名称(index),类似于数据库名
- employee 类型名称(type),类似于表名
- 1 特定雇员的ID,相当于每条记录中的ID
而请求体的内容-JSON文档-包含了这个员工的所有信息,也就是这条记录的所有字段。
很简单吧,无需额外的建库建表指定字段类型等操作,ES自动就把所有这些都干完了。
再添加几条数据:
curl -X PUT "localhost:9200/megacorp/employee/2" -H 'Content-Type: application/json' -d'
{
"first_name" : "Jane",
"last_name" : "Smith",
"age" : 32,
"about" : "I like to collect rock albums",
"interests": [ "music" ]
}
'
curl -X PUT "localhost:9200/megacorp/employee/3" -H 'Content-Type: application/json' -d'
{
"first_name" : "Douglas",
"last_name" : "Fir",
"age" : 35,
"about": "I like to build cabinets",
"interests": [ "forestry" ]
}
'
检索文档
由于ES所有的API都由类似命令发起,为简化,以下的例子仅包含了HTTP动词(如GET, PUT)和路径(省略了host部分)及请求体。同时在kibana的dev tools中同样使用简化的写法,让人能更集中注意力在更重要的数据而非命令本身上。
GET /megacorp/employee/1
上述命令返回ID为1的雇员:
{
"_index" : "megacorp",
"_type" : "employee",
"_id" : "1",
"_version" : 1,
"found" : true,
"_source" : {
"first_name" : "John",
"last_name" : "Smith",
"age" : 25,
"about" : "I love to go rock climbing",
"interests": [ "sports", "music" ]
}
}
GET /megacorp/employee/_search
上述命令返回所有雇员记录。
GET /megacorp/employee/_search?q=last_name:Smith
上述命令则返回姓为 Smith 的记录。
有时候querystring的方式无法表达复杂的查询,这时可以用查询表达式来构造复杂的查询:
GET /megacorp/employee/_search
{
"query" : {
"match" : {
"last_name" : "Smith"
}
}
}
这条查询与之前的一样,但是使用了请求体来替代querystring。
附录
由于ES的相关知识非常多,需要了解详细内容的,可以阅读下列链接:
- 《Elasticsearch 权威指南》中文版
- Elastic Stack and Product Documentation
最后
以上就是乐观鞋垫最近收集整理的关于ElasticSearch安装配置ElasticSearch的全部内容,更多相关ElasticSearch安装配置ElasticSearch内容请搜索靠谱客的其他文章。
发表评论 取消回复