elasticsearch初识

简单介绍


ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。【百度百科】


lucene:工具包,里面包含有各种建立索引,以及搜索的代码


全文检索

elasticsearch初识_第1张图片

传统的关系型数据库中检索特定的关键词,一般采用的是顺序扫描,这种顺序扫描需要扫描整张表的每条记录,并且还需要对每条记录做模糊匹配以判断是后含有关键词。相对于倒排索引通过关键词确定文档的位置来说,速度慢,性能差


分布式:多节点,数据分片,数据副本,容错性,高并发

  • elasticsearch对复杂的分布式机制的透明隐藏特性
    es隐藏了分布式的特性,使用者不用关心其中的细节即可使用es的功能,如:写入数据时自动分片,搜索请求自动分发,扩容时数据分片自动分配

  • reblance
    分布式架构一般都具有负载均衡的特性,es也不例外,一方面表现在在扩容时es会自动重新分配数据,另一方面就是请求会自动分配到不同节点上(shard分片)达到请求的负载均衡

  • 集群节点的作用
    master节点:只负责创建或者是节点和索引,也就是维护集群的元数据,master是高可用的,通过选举机制在启动或者是master挂掉之后选出新的master节点,可配置那些节点可以成为master节点

    slaver节点:每个slaver节点都是平等的,任何的slaver节点都可以接受请求,并将请求分发给不同节点,以及收集各个节点的response并返回给客户端



    基本概念


  • Index:这是es存储数据的地方,类似于关系数据库
  • type:类似关系数据库的表,主要功能是将完全不同schema的数据分开,一个index里面可以有若干个type。
  • document:这个类似关系数据库的一行,在同一个type下面,每一document都有一个唯一的id作为区分;
  • field:document Json中的一个字段,类似关系数据库的某一列,这是es数据存储的最小单位
  • Near Realtime(NRT):近实时,从数据写入到数据可以被搜索到有一个小延迟,基于es执行的搜索和分析可以达到秒级
  • ClusterNode:es可以以单点或者集群方式运行,以一个整体对外提供search服务的所有节点组成cluster,组成这个cluster的各个节点叫做node。
  • shard:通常叫分片,这是ES提供分布式搜索的基础,其含义为将一个完整的index分成若干部分存储在相同或不同的节点上,这些组成index的部分就叫做shard。
  • replica:和replication通常指的都是一回事,即index的冗余备份,可以用于防止数据丢失以及负载均衡



    es的基本CURD(kibana)


    新增

    put /tech/phone/1 {"name":"荣耀v9","price":3499,"desc":"你想要的快","tag":["秒拍","秒杀","秒抢"]}
    put /tech/phone/2 {"name":"荣耀magic","price":3699,"desc":"magic live","tag":["智能 ","ai"]}
    

    查询

    get /tech/phone/1
    get /tech/phone/2
    

    查询集群中的index状态

    get _cat/indices?v
    
    health status index   uuid                   pri rep docs.count docs.deleted store.size pri.store.size
    yellow open   .kibana qsZ5uf5RSsK3g68j6zX3Fw   1   1          1            0      3.1kb          3.1kb
    yellow open   tech    SpvwgpUxT7yY_iHaRqWSng   5   1          2            0     10.3kb         10.3kb
    

    更新

    put /tech/phone/1/_update {"doc":{"name":"honor v9"}}
    

    删除

    delete /tech/phone/1
    





    多种搜索方式


  • query string search

    搜索全部商品:get  /tech/phone/_search
    搜索商品名称中包含荣耀的商品,并且按照价格降序排序:get /tech/phone/_search?q=name:荣耀&sort=price:desc
    

    query string search使用的是get请求,对于复杂的请求,queryString比较难于构建,所以这种方式一般的不是经常使用的,一般采用DSL

  • query DSL(domain specified language)

    搜索全部商品:post /tech/phone/_search{"query":{"match_all":{}},"from":0,"size":1}
    搜索商品名称中包含荣耀的商品,并且按照价格降序排序:post /tech/phone/_search/{"query":{ "match":{ "name":"v9"}},"sort":[{"price":"asc"}]}
    

  • 全文检索

    post /tech/phone/_search{"query":{"match":{"name":"v9 magic"}}}
    

  • phrase search(短语搜索),同时包含

    post /tech/phone/_search{"query":{"match_phrase":{"name":"v9 magic"}}}
    

    DSL比较灵活,采用的是post请求,请求参数使用统一json格式,除了基本的匹配搜索、全文检索、短语搜索外,还包含诸如:过滤,高亮,聚合等类似于关系型数据库的操作。

  • 你可能感兴趣的:(elasticsearch初识)