Elasticsearch权威指南中文版文档格式.docx
- 文档编号:22582519
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:12
- 大小:21.85KB
Elasticsearch权威指南中文版文档格式.docx
《Elasticsearch权威指南中文版文档格式.docx》由会员分享,可在线阅读,更多相关《Elasticsearch权威指南中文版文档格式.docx(12页珍藏版)》请在冰豆网上搜索。
Elasticsearch鼓励你浏览并利用你的数
据,而不是让它烂在数据库里,因为在数据库里实在太难查询了。
Elasticsearch是你新认识的最好的朋友。
1.1、是什么
为了搜索,你懂的
Elasticsearch是一个基于ApacheLucene(TM)的开源搜索引擎。
无论在开
源还是专有领域,Lucene可以被认为是迄今为止最先进、性能最好的、功能最全的搜索引擎库。
但是,Lucene只是一个库。
想要使用它,你必须使用Java来作为开发语言并将其直接集成到你的应用中,更糟糕的是,Lucene非常复杂,你需要深入
了解检索的相关知识来理解它是如何工作的。
Elasticsearch也使用Java开发并使用Lucene作为其核心来实现所有索引
和搜索的功能,但是它的目的是通过简单的RESTfulAPI来隐藏Lucene的复杂
性,从而让全文搜索变得简单。
不过,Elasticsearch不仅仅是Lucene和全文搜索,我们还能这样去描述它:
分布式的实时文件存储,每个字段都被索引并可被搜索
分布式的实时分析搜索引擎
可以扩展到上百台服务器,处理PB级结构化或非结构化数据
而且,所有的这些功能被集成到一个服务里面,你的应用可以通过简单的
RESTfulAPI、各种语言的客户端甚至命令行与之交互
上手Elasticsearch非常容易。
它提供了许多合理的缺省值,并对初学者隐藏
了复杂的搜索引擎理论。
它开箱即用(安装即可使用),只需很少的学习既可在生产环境中使用。
Elasticsearch在Apache2license下许可使用,可以免费下载、使用和修
改。
随着你对Elasticsearch的理解加深,你可以根据不同的问题领域定制
Elasticsearch的高级特性,这一切都是可配置的,并且配置非常灵活。
模糊的历史
多年前,一个叫做ShayBanon的刚结婚不久的失业开发者,由于妻子要去
伦敦学习厨师,他便跟着也去了。
在他找工作的过程中,为了给妻子构建一个食谱的搜索引擎,他开始构建一个早期版本的Lucene。
直接基于Lucene工作会比较困难,所以Shay开始抽象Lucene代码以便
Java程序员可以在应用中添加搜索功能。
他发布了他的第一个开源项目,叫
做“Compass。
后来Shay找到一份工作,这份工作处在高性能和内存数据网格的分布式环境
中,因此高性能的、实时的、分布式的搜索引擎也是理所当然需要的。
然后他
决定重写Compass库使其成为一个独立的服务叫做Elasticsearch。
第一个公开版本出现在2010年2月,在那之后Elasticsearch已经成为
Github上最受欢迎的项目之一,代码贡献者超过300人。
一家主营
Elasticsearch的公司就此成立,他们一边提供商业支持一边开发新功能,不
过Elasticsearch将永远开源且对所有人可用。
+
Shay的妻子依旧等待着她的食谱搜索……
1.2、安装
安装Elasticsearch
理解Elasticsearch最好的方式是去运行它,让我们开始吧!
安装Elasticsearch唯一的要求是安装官方新版的Java,地址:
你可以从elasticsearch.org/download下载最新版本的Elasticsearch
curl-L-0<
1>
unzipelasticsearch-$VERSION.zipcdelasticsearch-$VERSION
URL
1.从elasticsearch.org/download获得最新可用的版本号并填入
中
提示:
在生产环境安装时,除了以上方法,你还可以使用Debian或者
RPM安装包,地址在这里:
downloadspage,或者也可以使
用官方提供的Puppetmodule或者Chefcookbook。
安装Marvel
Marvel是Elasticsearch的管理和监控工具,在开发环境下免费使用。
它包
含了一个叫做Sense的交互式控制台,使用户方便的通过浏览器直接与Elasticsearch进行交互。
Elasticsearch线上文档中的很多示例代码都附带一个ViewinSense的链接。
点击进去,就会在sense控制台打开相应的实例。
安装Marvel不是必须的,但是它可以通过在你本地Elasticsearch集群中运行示例代码而增加与此书的互动性。
Marvel是一个插件,可在Elasticsearch目录中运行以下命令来下载和安装:
./bin/plugin-ielasticsearch/marvel/latest
你可能想要禁用监控,你可以通过以下命令关闭Marvel:
echo'
marvel.agent.enabled:
false'
>
>
./config/elasticsearch.yml
运行Elasticsearch
Elasticsearch已经准备就绪,执行以下命令可在前台启动:
./bin/elasticsearch
如果想在后台以守护进程模式运行,添加-d参数。
打开另一个终端进行测试:
curl”
你能看到以下返回信息:
"
status"
:
200,
name"
"
ShrunkenBones"
version"
{
number"
140"
lucene_version"
4.10"
},
tagline"
YouKnow,forSearch"
}
这说明你的ELasticsearch集群已经启动并且正常运行,接下来我们可以开
始各种实验了。
集群和节点
节点(node)是一个运行着的Elasticsearch实例。
集群(cluster)是一组具有相
同cluster.name的节点集合,他们协同工作,共享数据并提供故障转移和扩展功能,当然一个节点也可以组成一个集群。
你最好找一个合适的名字来替代cluster.name的默认值,比如你自己的名字,这
样可以防止一个新启动的节点加入到相同网络中的另一个同名的集群中。
你可以通过修改config/目录下的elasticsearch.yml|文件,然后重启
ELasticsearch来做到这一点。
当Elasticsearch在前台运行,可以使用ctrl-c
快捷键终止,或者你可以调用shutdownAPI来关闭:
curl-XPOST”
查看Marvel和Sense
如果你安装了Marvel(作为管理和监控的工具),就可以在浏览器里通过以
下地址访问它:
你可以在Marvel中通过点击dashboards,在下拉菜单中访问Sense开发者控制台,或者直接访问以下地址:
1.3.API
与Elasticsearch交互
如何与Elasticsearch交互取决于你是否使用Java。
JavaAPI
Elasticsearch为Java用户提供了两种内置客户端:
节点客户端(nodeclient):
节点客户端以无数据节点(nonedatanode)身份加入集群,换言之,它自己
不存储任何数据,但是它知道数据在集群中的具体位置,并且能够直接转发请求到对应的节点上。
传输客户端(Transportclient):
这个更轻量的传输客户端能够发送请求到远程集群。
它自己不加入集群,只是简单转发请求给集群中的节点。
两个Java客户端都通过9300端口与集群交互,使用Elasticsearch传输协议(ElasticsearchTransportProtocol)。
集群中的节点之间也通过9300
端口进行通信。
如果此端口未开放,你的节点将不能组成集群。
TIP
Java客户端所在的Elasticsearch版本必须与集群中其他节点
一致,否则,它们可能互相无法识别。
关于JavaAPI的更多信息请查看相关章节:
JavaAPI
基于HTTP协议,以JSON为数据交互格式的RESTfulAPI
其他所有程序语言都可以使用RESTfulAPI,通过9200端口的与
Elasticsearch进行通信,你可以使用你喜欢的WEB客户端,事实上,如你
所见,你甚至可以通过curl命令与Elasticsearch通信。
NOTE
Elasticsearch官方提供了多种程序语言的客户端Groovy,Javascript,.NET,PHP,Perl,Python,以及Ruby
还有很多由社区提供的客户端和插件,所有这些可以在文档中找
至叽
向Elasticsearch发出的请求的组成部分与其它普通的HTTP请求是一样的:
curl-X<
VERB>
'
<
PROTOCOL>
:
//<
HOST>
PORT>
/<
PATH>
?
QUERY_STRING>
'
-d'
BODY>
VERBHTTP方法:
get,post,put,head,delete
PROTOCOLhttp或者https协议(只有在Elasticsearch前面有
https代理的时候可用)
HOSTElasticsearch集群中的任何一个节点的主机名,如果是在本地
的节点,那么就叫localhost
PORTElasticsearchHTTP服务所在的端口,默认为9200
PATHAPI路径(例如_count将返回集群中文档的数量),PATH可
以包含多个组件,例如_cluster/stats或者_nodes/stats/jvm
QUERY_STRING—些可选的查询请求参数,例如?
pretty参数将使请
求返回更加美观易读的JSON数据
BODY一个JSON格式的请求主体(如果请求需要的话)
举例说明,为了计算集群中的文档数量,我们可以这样做:
curl-XGET'
{
query"
match_all"
{}
Elasticsearch返回一个类似200ok的HTTP状态码和JSON格式的响应主
体(除了HEAD请求)。
上面的请求会得到如下的JSON格式的响应主体:
_shards"
total"
5,
successful"
failed"
0
我们看不到HTTP头是因为我们没有让curl显示它们,如果要显示,使用curl
命令后跟-i参数:
curl-i-XGET'
localhost:
9200/'
对于本书的其余部分,我们将简写curl请求中重复的部分,例如主机名和端口,
还有curl命令本身。
一个完整的请求形如:
9200/_count?
pretty'
}'
我们将简写成这样:
GET/_count
事实上,在Sense控制台中也使用了与上面相同的格式。
14文档
面向文档
应用中的对象很少只是简单的键值列表,更多时候它拥有复杂的数据结构,比如包含日期、地理位置、另一个对象或者数组。
总有一天你会想到把这些对象存储到数据库中。
将这些数据保存到由行和列组
成的关系数据库中,就好像是把一个丰富,信息表现力强的对象拆散了放入一个非常大的表格中:
你不得不拆散对象以适应表模式(通常一列表示一个字段),然后又不得不在查询的时候重建它们。
Elasticsearch是面向文档(documentoriented)的,这意味着它可以存储整
个对象或文档(document)。
然而它不仅仅是存储,还会索引(index)每个文档
的内容使之可以被搜索。
在Elasticsearch中,你可以对文档(而非成行成列
的数据)进行索引、搜索、排序、过滤。
这种理解数据的方式与以往完全不同,
JSON
ELasticsearch使用Javascript对象符号(JavaScriptObjectNotation)
也就是JSON,作为文档序列化格式。
JSON现在已经被大多语言所支持,而且已经成为NoSQL领域的标准格式。
它简洁、简单且容易阅读。
以下使用JSON文档来表示一个用户对象:
email"
Illi
J
first_name"
John"
last_name"
Smith"
info"
bio"
Eco-warrioranddefenderoftheweak"
age"
25,
interests"
["
dolphins"
"
whales"
]
join_date"
2014/05/01"
尽管原始的user对象很复杂,但它的结构和对象的含义已经被完整的体现在
JSON中了,在Elasticsearch中将对象转化为JSON并做索引要比在表结
构中做相同的事情简单的多。
尽管几乎所有的语言都有相应的模块用于将任意数据结构转换
为JSON,但每种语言处理细节不同。
具体请查看’Serialization”
ormafbhaHing”两个用于处理JSON的模块。
Elasticsearch官
方客户端会自动为你序列化和反序列化JSON。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Elasticsearch 权威 指南 中文版