Elasticsearch

一,应用场景

  • 海量数据搜索引擎,
  • 地图数据,附近好友,支持结构化数据,非结构化数据
  • 聚合分析,大数据存储
  • 分布式,易扩展

补充:海量数据如何选型

MySql,Redis内存数据库,不支持大量数据

mongoDB适用于数据管理

Solr和Elasticsearch在搜索上才能匹敌

数据迁移的工具:管道

下载地址:http://www.elastic.show/download/Elasticsearch/

 

 

 

 

 或者直接下载对应的浏览器的插件

 

_name   以_开头的表示对应的api

ES 采用restFul风格对数据进行增删改查
_search : 可以理解为查询语句
_maping : 可以理解为查看表结构

 canal伪装成slave,同步数据

二,全文检索

三,ES简介

全文搜索引擎服务器

提供了大量restful风格的api接口

ES中的索引(数据库),类型(表),文档(行)

三,安装

 

 docker ps -f 容器名:实时查看容器的日志文件

四,kibana

(es的客户端)

version: "3" 
volumes:
  data:
  config:
  plugin:
networks:
  es:
services:
  elasticsearch:
      image: elasticsearch:7.14.0
      ports:
        - "9200:9200"
        - "9300:9300"
      networks:
        - "es"
      environment:
        - "discovery-type=single-node"
        - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
      volumes:
      - data:/usr/share/elasticsearch/data
      - config:/usr/share/elasticsearch/config
      - plugin:/usr/share/elasticsearch/plugins
    
  kibana:
    image: kibana:7.14.0
    ports:
      - "5601:5601"
    networks:
      - "es"
    volumes:
      - ./kibana.yml:/usr/share/kibana/config/kibana.yml 

kibana.yml

server.host: "0"
server.shutdownTimeout: "5s"
elasticsearch.hosts: ["http://elasticsearch:9200"]
monitoring.ui.container.elasticsearch.enabled: true

 docker-compose up -d 启动

五,基本的概念

5.1 index 索引(索引库)
        我们为什么使用ES?因为想把数据存进去,然后再查询出来。

        我们在使用Mysql或者Oracle的时候,为了区分数据,我们会建立不同的数据库,库下面还有表的。

        其实ES功能就像一个关系型数据库,在这个数据库我们可以往里面添加数据,查询数据。

ES中的索引非传统索引的含义,ES中的索引是存放数据的地方,是ES中的一个概念词汇

index类似于我们Mysql里面的一个数据库 create database user; 好比就是一个索引库

 

5.2  type类型
        类型是用来定义数据结构的

        在每一个index下面,可以有一个或者多个type,好比数据库里面的一张表。

        相当于表结构的描述,描述每个字段的类型。

5.3 document:文档
        文档就是最终的数据了,可以认为一个文档就是一条记录。

        是ES里面最小的数据单元,就好比表里面的一条数据5.5

5.4 Field 字段
        好比关系型数据库中列的概念,一个document有一个或者多个field组成。

 5.5 shard:分片
        一台服务器,无法存储大量的数据,ES把一个index里面的数据,分为多个shard,分布式的存储在各个服务器上面。

        kafka:为什么支持分布式的功能,因为里面是有topic,支持分区的概念。所以topic A可以存在不同的节点上面。就可以支持海量数据和高并发,提升性能和吞吐量

5.6 replica:副本
        一个分布式的集群,难免会有一台或者多台服务器宕机,如果我们没有副本这个概念。就会造成我们的shard发生故障,无法提供正常服务。

        我们为了保证数据的安全,我们引入了replica的概念,跟hdfs里面的概念是一个意思。

可以保证我们数据的安全。

        在ES集群中,我们一模一样的数据有多份,能正常提供查询和插入的分片我们叫做 primary shard,其余的我们就管他们叫做 replica shard(备份的分片) 

        当我们去查询数据的时候,我们数据是有备份的,它会同时发出命令让我们有数据的机器去查询结果,最后谁的查询结果快,我们就要谁的数据(这个不需要我们去控制,它内部就自己控制了)

总结:
        在默认情况下,我们创建一个库的时候,默认会帮我们创建5个主分片(primary shrad)和5个副分片(replica shard),所以说正常情况下是有10个分片的。

        同一个节点上面,副本和主分片是一定不会在一台机器上面的,就是拥有相同数据的分片,是不会在同一个节点上面的。

        所以当你有一个节点的时候,这个分片是不会把副本存在这仅有的一个节点上的,当你新加入了一台节点,ES会自动的给你在新机器上创建一个之前分片的副本。

6. ES的相关命令

GET _cat/health 查看集群的健康状况

GET _all

GET _cat/indices 查看集群中所有的索引

PUT 类似于SQL中的增

DELETE 类似于SQL中的删

POST 类似于SQL中的改

GET 类似于SQL中的查

6.1 index相关的操作

_mapping:操作映射

_doc:操作文档

注意索引的操作没有修改操作。

 

创建index

PUT /new_index

 删除index

DELETE /new_index

  查看index 

GET _cat/indices

注意:索引中的mapping不能修改,错误之后只能删除

 7. ES的CURD操作(针对数据本身)

 

 

 

7.1  插入数据

//    数据库   数据表    一天数据的id
PUT /ecomerce/product/1

{

"name":"dior channel",

"desc":"shanghai gaodong",

"producer":"dior producer",

"tags":["shishang","shechi"]

}

 7.2  查看数据

GET /ecomerce/product/1

  7.3  修改数据

post和put都可以更新数据,区别:

  • post可以局部更新,有点像增量更新,会保留之前不冲突的数据
  • put 就是全量更新,就是会用新的put的内容去覆盖旧的所有的数据
PUT /index/_doc/1
{
    "name":"dior channel",

    "desc":"shanghai gaodong",

    "producer":"dior producer",

    "price":988,
    
    "tags":["shishang","shechi"]
}

POST /ecomerce/product/1
{
   
    "price":988
    
   
}
//这里post修改后的效果同上面的put修改后的效果是一样的

   7.3  删除数据

DELETE  /ecomerce/product/1

删除不会立即物理上删除,类似于逻辑删除。

注意:每一次操作,对应的数据的版本都会加一

   7.3  _search查询数据

  • 查询所有
GET /ecomerce/product/_search
{
    "query":{
        "match_all":{  // 匹配所有}
    }

}
  • 标准查询

match查询是一个标准查询,不管你需要全文本查询还是精确查询基本上都要用到它。

GET /ecomerce/product/_search
{
    "query":{
        "match":{
           "name":"chenyi" 
           }
    },
    "sort":{
        "price":{   //根据价格倒序排列
        "order":"desc"
        }
    }
}
  • 分页查询 
GET /ecomerce/product/_search
{
    "query":{
        "match":{
           "name":"chenyi" 
           }
    },
    "sort":{
        "price":{   //根据价格倒序排列
        "order":"desc"
        }
    },
    "from":0,  //从第几个数据开始
    "size":2   //每页数据的个数
}
  • 指定返回字段
GET /ecomerce/product/_search
{
    "query":{
        "match_all":{
           
           }
    },
    "source":["name","price"]
   
}
  • 多条件查询

bool 过滤可以用来合并多个过滤条件查询结果的布尔逻辑,它包含以下操作符:

    must :: 多个查询条件的完全匹配,相当于 and。

    must_not :: 多个查询条件的相反匹配,相当于 not。

    should :: 至少有一个查询条件匹配, 相当于 or。

    这些参数可以分别继承一个过滤条件或者一个过滤条件的数组
 

GET /ecomerce/product/_search
{
    "query":{
        "bool":{
           "must":{   //相当于 and 
                "match":{
                "name":"chenyi"
                }
            }
        },
      "filter":{
            "range":{
               "price":{
                    "gt":250
                }
            }
        }  
    }
   
}

注意:match查询时,会对查询条件分词,若不想分词查询,使用 "match_phrase"



原文链接:https://blog.csdn.net/JENREY/article/details/81290535

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值