读了上面的小故事,是不是觉得对ElasticSearch的前世今生,兴趣十足呢?!我计划写一篇ElasticSearch的系列学习笔记,深入浅出,不仅方便大家学习,还能够让我更加深入的了解这门技术。学习一门新技术的第一课就是hello world.
接下来的章节,实操ElasticSearch hello world。
ElasticSearch简介
回忆时光
许多年前,一个刚结婚的名叫 Shay Banon 的失业开发者,跟着他的妻子去了伦敦,他的妻子在那里学习厨师(感觉国内的女生很少有喜欢做饭的,反而男生喜欢做饭)。 在寻找一个赚钱的工作的时候,为了给他的妻子做一个食谱搜索引擎,他开始使用 Lucene 的一个早期版本。
直接使用 Lucene 是很难的,因此 Shay 开始做一个抽象层,Java 开发者使用它可以很简单的给他们的程序添加搜索功能。 他发布了他的第一个开源项目 Compass。
后来 Shay 获得了一份工作,主要是高性能,分布式环境下的内存数据网格。这个对于高性能,实时,分布式搜索引擎的需求尤为突出, 他决定重写 Compass,把它变为一个独立的服务并取名 Elasticsearch。
第一个公开版本在2010年2月发布,从此以后,Elasticsearch 已经成为了 Github 上最活跃的项目之一,他拥有超过300名 contributors(目前736名 contributors )。 一家公司已经开始围绕 Elasticsearch 提供商业服务,并开发新的特性,但是,Elasticsearch 将永远开源并对所有人可用。
据说,Shay 的妻子还在等着她的食谱搜索引擎…
切入正题
读了上面的小故事,是不是觉得对ElasticSearch的前世今生,兴趣十足呢?!我计划写一篇ElasticSearch的系列学习笔记,深入浅出,不仅方便大家学习,还能够让我更加深入的了解这门技术。学习一门新技术的第一课就是hello world.
接下来的章节,实操ElasticSearch hello world。
Mac ElasticSearch 安装
1、Java环境的安装配置
2、brew install elasticSearch(仅适用于Mac)
3、brew info elasticSearch,会显示如下信息表示安装成功
elasticSearch: stable 6.2.4, HEAD
Distributed search & analytics engine
https://www.elastic.co/products/elasticsearch
/usr/local/Cellar/elasticSearch/6.2.4 (112 files, 30.8MB)
Built from source on 2018-05-29 at 11:10:53
From: https://github.com/Homebrew/homebrew-core/blob/master/Formula/elasticsearch.rb
==> Requirements
Required: java = 1.8 ✔
==> Options
--HEAD
Install HEAD version
==> Caveats
4、brew services start elasticsearch
启动后localhost:9200,打印如下,说明ElasticSearch启动成功
{
"name" : "yptOhLD",
"cluster_name" : "elasticsearch_1",
"cluster_uuid" : "_na_",
"version" : {
"number" : "6.2.4",
"build_hash" : "ccec39f",
"build_date" : "2018-04-12T20:37:28.497551Z",
"build_snapshot" : false,
"lucene_version" : "7.2.1",
"minimum_wire_compatibility_version" : "5.6.0",
"minimum_index_compatibility_version" : "5.0.0"
},
"tagline" : "You Know, for Search"
}
5、brew install kibana(仅适用于Mac)
6、brew services start kibana
7、打开kibana localhost:5601
基于以上7个步骤,环境问题搞定,下面来真实的操作一下ElasticSearch。
ElasticSearch Hello World
创建索引(create index)
curl -XPUT "http://localhost:9200/goods_index"
curl -XGET "http://localhost:9200/goods_index"
{
"goods_index": { #索引名称
"aliases": {},
"mappings": {},
"settings": {
"index": {
"creation_date": "1530627979046",
"number_of_shards": "5", #5个分片
"number_of_replicas": "1", #一个备份
"uuid": "kTy_hHlQQRaVPygKHZpUYQ",
"version": {
"created": "6020499"
},
"provided_name": "goods_index"
}
}
}
}
索引文档(index document)
curl -XPUT "http://localhost:9200/goods_index/goods/12343333" -H 'Content-Type:application/json' -d'
{
"skuName": "华为手机",
"url":"https://item.jd.com/6946605.html"
}'
索引数据之后,再执行查看索引详情,会发现mappings属性多了一个名字叫goods的type,goods下面多了skuName和url两个properties。
{
"goods_index": {
"aliases": {},
"mappings": {
"goods": {
"properties": {
"skuName": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"url": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
}
}
},
"settings": {
"index": {
"creation_date": "1530627979046",
"number_of_shards": "5",
"number_of_replicas": "1",
"uuid": "kTy_hHlQQRaVPygKHZpUYQ",
"version": {
"created": "6020499"
},
"provided_name": "goods_index"
}
}
}
}
查询文档(query document)
curl -XGET "http://localhost:9200/goods_index/goods/_search"
执行上面的查询语句,得到如下的结果集。
{
"took": 1,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 1,
"max_score": 1,
"hits": [
{
"_index": "goods_index",
"_type": "goods",
"_id": "12343333",
"_score": 1,
"_source": {
"skuName": "华为手机",
"url": "https://item.jd.com/6946605.html"
}
}
]
}
}
小节
ElasticSearch的Hello world,是不是比java,python难一些呢?不过还好,一个检索系统,就此拉开了帷幕。这就是ElasticSearch推崇的“开箱即用”的理念。但是要学好ElasticSearch可不是一件容易的事情,细心的同学,可能会发现有一些细节:
1、什么是索引?
2、什么是文档?
3、索引和文档是什么样的关系?
……
请持续关注我的博客,我们逐渐从ElasticSearch小白,变成大牛。
参考文献
elasticSearch权威指南2.x
elasticSearch reference 6.2