Elasticsearch是什么?
Elasticsearch是一个实时分布式搜索和分析引擎。它让你以前所未有的速度处理大数据成为可能。
它用于全文搜索,结构化搜索,分析以及将这三者混合使用:
- 维基百科使用Elasticsearch提供全文搜索并高亮关键字,以及输入实时搜索和搜索纠错等搜索建议功能。
- 英国卫报使用Elasticsearch结合用户日志和社交网络数据提供给他们编辑以实时的反馈,以便及时了解公众对新发表的文章的回应。
- Githup使用Elasticsearch检索1300亿行的代码。
Elasticsearch是一个基于Apache Lucene(TM)的开源搜索引擎。无论在开源还是专有领域,Lucene可以被认为是迄今为止最先进,性能最好的,功能最全的搜索引擎库。
但是,Lucene只是一个库。想要使用它,你必须使用Java来作为开发语言并将其直接集成到你的应用中,更糟糕的是,Lucene非常复杂,你需要深入了解检索的相关知识来理解它是如何工作的。
Elasticsearch也使用Java开发并使用Lucene作为其核心来实现所有索引和搜索的功能,但是它的目的是通过简单的 RESTfulAPI
来隐藏Lucene的复杂性,从而让全文搜索变得简单。
理解Elasticsearch的最好方式就是去运行它,让我们开始吧!
安装Elasticsearch的唯一前提就是安装官方新版Java,至少java8,地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
你可以从Elasticsearch官网下载最新版本的Elasticsearch,地址:https://www.elastic.co/downloads/elasticsearch
下载完毕后解压即可。Elasticsearch已经准备就绪,ElasticSearch配置:
(ElasticSearch的配置文件在elasticsearch下载目录下的config文件夹下)
# Set the bind address to a specific IP (IPv4 or IPv6):
#
network.host: 192.168.80.131
#
# Set a custom port for HTTP:
#
http.port: 9200
执行以下命令可在前台启动(Windows在cmd窗口下,linux在命令行下)
//linux
./bin/elasticsearch
//Windows
cd D:\elasticsearch-6.3.1\elasticsearch-6.3.1\bin(跳到Elasticsearch解压目录下的bin目录)
后输入
elasticsearch
如果想在后台以守护进程模式运行,添加-d参数
//linux
./bin/elasticsearch -d
//windows
elasticsearch -d
Windows运行下可能没有curl终端环境,具体安装步骤见:https://www.cnblogs.com/xing901022/p/4652624.html
打开终端进行Elasticsearch环境测试
curl "http://localhost:9200/pretty"
你能看到以下返回信息:
{
"status": 200,
"name": "Shrunken Bones",
"version": {
"number": "1.4.0",
"lucene_version": "4.10"
},
"taglineKnow, fh
}
}
这说明你的ELasticsearch集群已经启动并且正常运行,接下来我们可以开始各种实验了。
一些关于Elasticsearch的基本概念
集群和节点
节点(node)是一个运行着的Elasticsearch实例。集群(cluster)是一组具有相同 cluster.name 的节点集合,他们协同工作,共享数据并提供故障转移和扩展功能,当然一个节点也可以组成一个集群。
索引,类型,文档,字段
在Elasticsearch中,文档归属于一种类型(Type),而这些类型存在于索引(名词index)中;Elasticsearch集群可以包含多个索引(indices)(数据库),每一个索引可以包含多个类型(types)(表),每一个类型包含多个文档(documents)(行),然后每个文档包含多个字段(Fields)(列)。,可以画一张简单的对比图来类比传统关系型数据库:
关系型数据库-> Databases->Tables-> Rows ->Columns
Elasticsearch-> Indexes ->Types ->Documents->Fields
Elasticsearch的交互
基于HTTP协议,以JSON为数据交互格式的RESTful API
其他所有程序语言都可以使用RESTful API,通过9200端口的与Elasticsearch进行通信,你可以使用你喜欢的WEB客户端,事实上,如你所见,你甚至可以通过 curl 命令与Elasticsearch通信。
向Elasticsearch发出的请求的组成部分与其它普通的HTTP请求是一样的:
curl -X<VERB> '<PROTOCOL>://<HOST>/<PATH>?<QUERY_STRING>' -d '<BODY>'
- VERB HTTP方法: GET , POST , PUT , HEAD , DELETE
- PROTOCOL http或者https协议(只有在Elasticsearch前面有https代理的时候可用)
- HOST Elasticsearch集群中的任何一个节点的主机名,如果是在本地的节点,那么就叫localhost。
- PORT Elasticsearch HTTP服务所在的端口,默认为9200
- QUERY_STRING 一些可选的查询请求参数,例如?pretty可以使请求返回更美观易读的JSON数据。
- BODY 一个JSON格式的请求主体
例如:
curl -XGET 'http://localhost:9200/_count?pretty' -d '
{
"query": {
"match_all": {}
返回结果如下:
{
"count" : 0,
"_shards" : {
"total" : 5,
"successful" : 5,
"failed" : 0
}
}
想要看到http请求可以在curl命令后跟 - i 参数
curl -i -XGET 'localhost:9200/'