Elasticsearch day1

第一章 Elasticsearch简介

1.1 什么是Elasticsearch

Elaticsearch,简称为es, es是一个开源的==高扩展的分布式全文检索引擎==,它可以近乎实时的检索数据;本身扩展性很好,可以扩展到上百台服务器,处理PB级别的数据。ES使用Java开发。Lucene作为其核心来实现所有索引和搜索的功能,但是它的目的是通过简单的RESTful API来隐藏Lucene的复杂性,从而让全文搜索变得简单。

第二章 相关软件的安装

2.1 Elasticsearch安装

1、下载ES压缩包

目前Elasticsearch最新的版本是7.4.2,我们使用6.8.0版本,建议使用JDK1.8及以上

Elasticsearch分为Linux和Window版本,基于我们主要学习的是Elasticsearch的Java客户端的使用,所以我们课程中使用的是安装较为简便的Window版本,项目上线后,公司的运维人员会安装Linux版的ES供我们连接使用。

Elasticsearch的官方地址:https://www.elastic.co/cn/downloads/past-releases

2.2 安装ES插件ElasticSearch-head
1.在Chrome浏览器地址栏中输入:chrome://extensions/
2. 打开Chrome扩展程序的开发者模式
3. 将资料中的ElasticSearch-head-Chrome插件.crx拖入浏览器的插件页面

2.3 安装Kibana

1、什么是Kibana

Kibana是ElasticSearch的数据可视化和实时分析的工具,利用Elasticsearch的聚合功能,生成各种图表,如柱形图,线状图,饼图等。

https://www.elastic.co/cn/products/kibana
1.解压
2.修改elasticsearch服务器的地址
在这里插入图片描述
修改kibana配置支持中文:

i18n.locale: "zh-CN"

在这里插入图片描述

4、运行访问

4.1 进入安装目录下的bin目录
在这里插入图片描述
4.2 双击运行,启动成功
4.3 发现kibana的监听端口是5601,我们访问:http://127.0.0.1:5601

4.1 索引库操作

Elasticsearch采用Rest风格API,因此其API就是一次http请求,你可以用任何工具发起http请求

1.创建索引库

发送请求:

# 在kibana中,不用写地址和端口,/heima是简化写法,真实请求地址是:http://127.0.0.1:9200/heima
# 请求方法:PUT
PUT /heima

响应结果:

{
   
  "acknowledged" : true,
  "shards_acknowledged" : true,
  "index" : "heima"
}

“acknowledged” : true, 代表操作成功
“shards_acknowledged” : true, 代表分片操作成功
“index” : “heima” 表示创建的索引库名称

注意:创建索引库的分片数默认5片,在7.0.0之后的ElasticSearch版本中,默认分片数变为1片;

2.查看索引库

发送请求:

# 请求方法GET
GET /heima

响应结果:

{
   
  "heima" : {
   
    "aliases" : {
    }, //别名
    "mappings" : {
    }, //映射ddl
    "settings" : {
   
      "index" : {
   
        "creation_date" : "1573610302775",
        "number_of_shards" : "5",
        "number_of_replicas" : "1", //副本数
        "uuid" : "6Ffe20CIT76KchAcvqE6NA",
        "version" : {
   
          "created" : "6080099" //当前索引库的版本
        },
        "provided_name" : "heima"
      }
    }
  }
}

响应内容解释:

{
   
  "heima【索引库名】" : {
   
    "aliases【别名】" : {
    },
    "mappings【映射】" : {
    },
    "settings【索引库设置】" : {
   
      "index【索引】" : {
   
        "creation_date【创建时间】" : "1573610302775",
        "number_of_shards【索引库分片数】" : "5",
        "number_of_replicas【索引库副本数】" : "1",
        "uuid【唯一标识】" : "6Ffe20CIT76KchAcvqE6NA",
        "version【版本】" : {
   
          "created" : "6080099"
        },
        "provided_name【索引库名称】" : "heima"
      }
    }
  }
}

3.删除索引库

发送请求:

# 请求方法:DELETE
DELETE /heima

响应结果:

{
   
  "acknowledged" : true
}

4.2 类型(type)及映射(mapping)操作

有了索引库,等于有了数据库中的database。接下来就需要索引库中的类型了,也就是数据库中的。创建数据库表需要设置字段约束,索引库也一样,在创建索引库的类型时,需要知道这个类型下有哪些字段,每个字段有哪些约束信息,这就叫做映射(mapping)

1.配置映射

给heima这个索引库添加了一个名为goods的类型,并且在类型中设置了4个字段:

  • title:商品标题
  • subtitle: 商品子标题
  • images:商品图片
  • price:商品价格

发送请求:

PUT /heima/goods/_mapping
{
   
  "properties": {
   
    "title":{
   
      "type": "text",
      "analyzer": "ik_max_word"
      
    },
    "subtitle":{
   
      "type": "text",
      "analyzer": "ik_max_word"
    },
    "images":{
   
      "type": "keyword",
      "index": false
    },
    "price":{
   
      "type": "float",
      "index": true 
    }
  }
}

响应结果:

{
   
  "acknowledged" : true
}

内容解释:

PUT /索引库名/_mapping/类型名称 或 索引库名/类型名称/_mapping
{
   
  "properties": {
   
    "字段名称":{
   
      "type【类型】": "类型",
      "index【是否索引】": true, //默认为true
      "store【是否存储】": true,
      "analyzer【分析器】": "分词器"
    }
    ...
  }
}

类型名称:就是前面将的type的概念,类似于数据库中的表
字段名:任意填写,下面指定许多属性,例如:

  • type:类型,Elasticsearch中支持的数据类型非常丰富,说几个关键的:
    1. String类型,又分两种:

      • text:可分词
      • keyword:不可分词,数据会作为完整字段进行匹配
    2. Numerical:数值类型,分两类

      • 基本数据类型:long、interger、short、byte、double、float、half_float
      • 浮点数的高精度类型:scaled_float
    3. Date:日期类型

    4. Array:数组类型

    5. Object:对象

  • index:是否索引,默认为true,也就是说你不进行任何配置,所有字段都会被索引。
    • true:字段会被索引,则可以用来进行搜索。默认值就是true
    • false:字段不会被索引,不能用来搜索
  • store:是否将数据进行独立存储,默认为false
    • 原始的文本会存储在_source里面,默认情况下其他提取出来的字段都不是独立存储的,是从_source里面提取出来的。当然你也可以独立的存储某个字段,只要设置store:true即可,获取独立存储的字段要比从_source中解析快得多,但是也会占用更多的空间,所以要根据实际业务需求来设置,默认为false。
  • analyzer:分词器,这里的ik_max_word即使用ik分词器

2.查看映射

发送请求:

# 请求方法:GET
GET /heima/goods/_mapping

响应结果:

{
   
  "heima" : {
   
    "mappings" : {
   
      "goods" : {
   
        "properties" : {
   
          "images" : {
   
            "type" : "keyword",
            "index" : false
          },
          "price" : {
   
            "type" : "float"
          },
          "subtitle" : {
   
            "type" : "text",
            "analyzer" : "ik_max_word"
          },
          "title" : {
   
            "type" : "text",
            "analyzer" : "ik_max_word"
          }}}}}
}

3.一次创建索引库及配置映射(常用)

刚才的案例中,我们是把创建索引库和类型分开来做,其实也可以在创建索引库的同时,直接制定索引库中的类型

发送请求:

PUT /heima1
{
   
  "settings": {
   },
  "mappings": {
   
    "goods":{
   
      "properties": {
   
        "title":{
   
          "type": "text",
          "analyzer": "ik_max_word"
          
        },
        "subtitle":{
   
          "type": "text",
          "analyzer": "ik_max_word"
        },
        "images":{
   
          "type": "keyword",
          "index": false
        },
        "price":{
   
          "type": "float",
          "index": true
        }
      }
    }
  }
}

响应结果:

{
   
  "acknowledged" : true,
  "shards_acknowledged" : true,
  "index" : "heima1"
}

请求内容解释:

PUT /{索引库名称}
{
  "settings【设置】": {},
  "mappings【映射】": {
    "{类型名称}":{
      "properties": {
        "title":{
          "type【类型】": "text",
          "index【是否索引】": true,
          "store【是否存储】": true,
          "analyzer【分析器】": "ik_max_word"
        }
        ...
      }
    }
  }
}

4.3 文档操作

文档,即索引库中某个类型下的数据,会根据规则创建索引,将来用来搜索。可以类比做数据库中的每一行数据。

1.新增文档

发送请求:

POST /heima/goods
{
   
    "title":"小米手机",
    "images":"http://image.leyou.com/12479122.jpg",
    "price":2699.00
}

响应结果:

{
   
  "_index" : "heima",
  "_type" : "goods",
  "_id" : "EwVLY24BL4R5dXuhZ--1",
  "_version" : 1,
  "result" : "created",
  "_shards" : {
   
    "total" : 2,
    "successful" : 1,
    "failed" : 0
  },
  "_seq_no" : 0,
  "_primary_term" : 1
}

响应结果解析:

{
   
  "_index【索引库】" : "heima",
  "_type【类型】" : "goods",
  "_id【主键id】" : "EwVLY24BL4R5dXuhZ--1",
  "_version【版本】" : 1,
  "result【操作结果】" : "created",
  "_shards【分片】" : {
   
    "total【总数】" : 2,
    "successful【成功】" : 1,
    "failed【失败】" : 0
  },
  "_seq_no" : 0,
  "_primary_term" : 1
}

可以看到结果显示为:created,是创建成功了。

另外,需要注意的是,在响应结果中有个_id字段,这个就是这条文档数据的唯一标示,以后的增删改查都依赖这个id作为唯一标示。可以看到id的值为:EwVLY24BL4R5dXuhZ–1,这里我们新增时没有指定id࿰

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值