elasticSearch系列笔记(1)-Hello ElasticSearch

读了上面的小故事,是不是觉得对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

评论