Elasticsearch简介

介绍

特点

ES 是基于Lucence编写的开源分布式搜索引擎,它有以下几个特点

  • lucence:底层搜索引擎
  • 分布式:横向可扩展能力
  • 全文检索:将一段词语进行分词,并将分出的词语统一的放在一个分词库中,再搜索时,根据关键字取分词库中检索,找到匹配的内容(倒排索引)。

概念

ES使用倒排索引来检索数数据。类比:书本(index)–>小说|散文|杂志(type)–>书里面的一行一行内容(document)–> 字|词组|句子(filed)

  • Index索引:es里面使用的倒排索引来检索数据,所以我们这里有个索引的概念,它有2个含义,一个可以理解为代表倒排索引,一个为“索引数据”即存储数据到es里面(会经过倒排索引这个步骤)。

  • type类型

    • 5.x 版本一个index下可以有多个type
    • 6.x 版本一个index下只可以有一个type
    • 7.x 版本,index里面没有type
  • document文档,实质存储的内容,类比mysql表里面的row

  • filed 字段:文档里面字段,类比mysql 每个表里面的字段field。

查询步骤

  1. 将存放的数据以一定的方式进行分词,并将分词的内容存放到一个单独的分词库中。

  2. 当用户取查询数据时,会将用户的查询关键字进行分词,然后去分词库中匹配内容,最终得到数据的id标识

  3. 根据id标识去存放数据的位置拉去指定数据

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Mb3ueaGQ-1602215594343)(Elasticsearch%E7%AE%80%E4%BB%8B/es%E6%A3%80%E7%B4%A2%E6%B5%81%E7%A8%8B.png)]

对比solr

  1. solr 查询死数据,速度比es快。但是数据如果是改变的,solr查询速度会降低很多,ES的查询速度没有明显的改变

  2. solr搭建集群 依赖ZK,ES本身就支持集群搭建

  3. 最开始solr 的社区很火爆,针对国内文档 少,ES出现后,国内社区火爆程度 上升,,ES的文档非常健全

  4. ES对云计算和大数据支持很好

ES 安装

docker-compose 安装

编写docker-compose.yml

version: "3.1"
services:
  elasticsearch:
    image: daocloud.io/library/elasticsearch:6.5.4
    restart: always
    container_name: elasticsearch
    ports:
      - 9200:9200
  kibana:
    image: daocloud.io/library/kibana:6.5.4
    restart: always
    container_name: kibana
    ports:
      - 9200:9200
    environment:
            - elasticsearch_url=http://127.0.0.1:9200
    depends_on:
      - elasticsearch

官网下载

  • elasticsearch :https://www.elastic.co/downloads/past-releases/elasticsearch-6-5-4
  • kibana: https://www.elastic.co/downloads/past-releases/kibana-6-5-4

Elasticsearch 基本操作

restful语法

GET请求:
    http://ip:port/index :查询索引信息
    http://ip:port/index/type/doc_id :查询指定的文档信息
POST请求:
    http://ip:port/index/type/_search: 查询文档,可以在请求体中添加json字符串来代表查询条件
    http://ip:port/index/type/doc_id/_update: 修改文档,在请求体中添加json字符串来代表修改的信息
PUT请求:
    http://ip:port/index : 创建一个索引,需要在请求体中指定索引的信息
    http://ip:port/index/type/_mappings:代表创建索引时,指定索引文档存储属性的信息
DELETE 请求:
    http://ip:port/index: 删除跑路
    http://ip:port/index/type/doc_id:  删除指定的文档

Kibana 中操作

我们主要关注Kibana中的Dev Tools(操作es) 和Mangement(查看索引信息)

增删改查

  • 新建索引不指定mapping
#number_of_shards  分片
#number_of_replicas 备份
PUT /person
{
     
  "settings": {
     
    "number_of_shards": 5, 
    "number_of_replicas": 1
  }
}
  • 新建索引并指定mapping
#创建索引,指定数据类型
PUT /book
{
     
  "settings": {
     
    #分片数
    "number_of_shards": 5,
    #备份数
    "number_of_replicas": 1
  },
    #指定数据类型
 "mappings": {
     
    #类型 Type
   "novel":{
     
    #文档存储的field
     "properties":{
     
       #field属性名
       "name":{
     
         #类型
         "type":"text",
         #指定分词器
         "analyzer":"ik_max_word",
         #指定当前的field可以被作为查询的条件
         "index":true,
         #是否需要额外存储
         "store":false
       },
       "author":{
     
         "type":"keyword"
       },
       "count":{
     
         "type":"long"
       },
       "on-sale":{
     
         "type":"date",
           #指定时间类型的格式化方式
         "format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"
       },
        "descr":{
     
          "type":"text",
          "analyzer":"ik_max_word"
       }
     }
   }
 }
}
  • 查询索引
GET /person
  • 更新索引

    #number_of_shards  分片
    #number_of_replicas 备份
    PUT /person
    {
           
      "settings": {
           
        "number_of_shards": 5, 
        "number_of_replicas": 1
      }
    }
    
  • 删除索引

DELETE /person

Filed 类型

官方文档:https://www.elastic.co/guide/en/elasticsearch/reference/6.8/mapping-types.html

字符串类型:
  text: 一般用于全文检索,将当前field 进行分词
  keyword:当前field  不会进行分词
数值类型:
  long:
  Intger:
  short:
  byte:
  double:
  float:
  half_float: 精度比float 小一半
  scaled_float:根据一个long 和scaled 来表达一个浮点型 long-345, -scaled 100 ->3.45
时间类型:
  date类型,根据时间类型指定具体的格式
    PUT my_index
    {
     
      "mappings": {
     
        "_doc": {
     
          "properties": {
     
            "date": {
     
              "type":   "date",
              "format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"
            }
          }
        }
      }
    }
布尔类型:
  boolean 类型,表达truefalse
二进制类型:
  binary类型暂时支持Base64编码的字符串
范围类型:
  integer_range:
  float_range:
  long_range:赋值时,无需指定具体的内容,只需存储一个范围即可,gte,lte,gt,lt,
  double_range:
  date_range:
  ip_range:

    PUT range_index
    {
     
      "settings": {
     
        "number_of_shards": 2
      },
      "mappings": {
     
        "_doc": {
     
          "properties": {
     
            "expected_attendees": {
     
              "type": "integer_range"
            },
            "time_frame": {
     
              "type": "date_range", 
              "format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"
            }
          }
        }
      }
    }

    PUT range_index/_doc/1?refresh
    {
     
      "expected_attendees" : {
      
        "gte" : 10,
        "lte" : 20
      },
      "time_frame" : {
      
        "gte" : "2015-10-31 12:00:00", 
        "lte" : "2015-11-01"
      }
    }
经纬度类型:
  geo_point:用来存储经纬度
IP类型:
  ip:可以存储IPV4IPV6
其他的数据类型,参考官网

文档操作

  • 新建
自动生成id
#添加文档,自动生成id
POST /book/novel
{
     
  "name":"盘龙",
  "author":"我吃西红柿",
  "count":100000,
  "on-sale":"2001-01-01",
  "descr":"大小的血睛鬃毛狮,力大无穷的紫睛金毛猿,毁天灭地的九头蛇皇,携带着毁灭雷电的恐怖雷龙……这里无奇不有,这是一个广博的魔幻世界。强者可以站在黑色巨龙的头顶遨游天际,恐怖的魔法可以焚烧江河,可以毁灭城池,可以夷平山岳……"
}

#添加文档,手动指定id
PUT /book/novel/1
{
     
  "name":"红楼梦",
  "author":"曹雪芹",
  "count":10000000,
  "on-sale":"2501-01-01",
  "descr":"中国古代章回体长篇小说,中国古典四大名著之一,一般认为是清代作家曹雪芹所著。小说以贾、史、王、薛四大家族的兴衰为背景,以富贵公子贾宝玉为视角,以贾宝玉与林黛玉、薛宝钗的爱情婚姻悲剧为主线,描绘了一批举止见识出于须眉之上的闺阁佳人的人生百态,展现了真正的人性美和悲剧美"
}
  • 修改
#修改文档,使用doc 方式
POST /book/novel/1/_update
{
     
  "doc":{
     
      #指定需要修改的field和对应的值
    "count":566666
  }

  • 删除
#根据id删除文档
DELETE /book/novel/3mEnk3MBaSKoGN4T2olw 

你可能感兴趣的:(大数据)