elasticsearch1

es的特点:

  1. 自动的维护数据的分布到多个节点索引的建立,还有搜索请求到多个节点的执行;
  2. 自动维护数据的冗余副本,保证说,一些机器宕机了,不会丢失任何数据;
  3. 封装了更多的高级功能,以给我们提供更多的高级的支持,让我们快速的开发应用,开发更多的复杂的应用:复杂的搜索功能,聚合分析的功能,基于地理位置的搜索。
  • elasticsearch是关键词    分布式       搜索    数据分析
  • es的搜索类型:全文搜索、结构化搜索(按照某种条件进行搜索)、数据分析。
  • 对海量的数据进行近实时的处理
  1. es可以对海量的数据通过分布到多台的服务器上进行存储和检索。
  2. 近实时:将搜索的时间降低到秒级别;

es的核心概念:

  1. NRT(近实时):1.将数据的存储和搜索之间的时间缩短到秒级。2.将搜索缩短到秒级
  2. cluster:集群。可以包含多个节点。将数据分布到不同的节点减少节点的负载。
  3. document:es的最少数据单元。一个文档可以是一条数据。通常用json数据结构进行表示,每个索引下的type都可以存放多个document。一个document里面可以有多个field,每个field就是一个数据字段。
  4. Index:索引,包含一堆有相似结构的文档数据,比如可以有一个客户索引,商品分类索引,订单索引,索引有一个名称。一个index包含很多document,一个index就代表了一类类似的或者相同的document。比如说建立一个product index,商品索引,里面可能就存放了所有的商品数据,所有的商品document。
  5. Type:类型,每个索引里都可以有一个或多个type,type是index中的一个逻辑数据分类,一个type下的document,都有相同的field,比如博客系统,有一个索引,可以定义用户数据type,博客数据type,评论数据type。

    商品index,里面存放了所有的商品数据,商品document

    但是商品分很多种类,每个种类的document的field可能不太一样,比如说电器商品,可能还包含一些诸如售后时间范围这样的特殊field;生鲜商品,还包含一些诸如生鲜保质期之类的特殊field

    type,日化商品type,电器商品type,生鲜商品type

    日化商品type:product_id,product_name,product_desc,category_id,category_name
    电器商品type:product_id,product_name,product_desc,category_id,category_name,service_period
    生鲜商品type:product_id,product_name,product_desc,category_id,category_name,eat_period

    每一个type里面,都会包含一堆document。

  6. shard的好处:1.可以横向扩展。2.数据分布到所有的shard上,多台服务器上的所有的操作,会在多台服务器上并行执行,提高吞吐量和性能。 

  7. replica:为shard节点的宕机提供的备份:提供了高可用性。提升了搜索这类请求的吞吐量和性能。

    默认情况写是将shard和replica保存在两台服务器上。

         将es与传统的数据库进行对比发现:

                                                Elasticsearch            数据库

                                                -----------------------------------------

                                                        Type                表

                                                      Document            行
                                                           Index                库        

red:每个索引的shard和replaca都是可用的状态;

yellow:不是所有的replaca处于active状态的;

red:不是所有的red都处于active的状态;

  • 检查集群的健康状态:GET _cluster/health
  • 删除索引:DELETE /索引名?pretty
  • 获取索引:GET _cat/indices?v      v表示获取表头的数据
  • 创建一个doc:
  • PUT /index/type/doc
    {
        "name" : "zhonghua yagao",
        "desc" :  "caoben zhiwu",
        "price" :  40,
        "producer" :      "zhonghua producer",
        "tags": [ "qingxin" ]
    }
  • 更改一个doc  
  • POST /index/type/doc/_update
    {
      "doc": {
        "name":"jiaqiangbangaolujie"
      }
    }
  • 删除一个doc      DELETE /index/type/doc

商品的多种搜索方式

  • query string search: GET /index/type/_search
  • took:耗费了几毫秒
    timed_out:是否超时,这里是没有
    _shards:数据拆成了5个分片,所以对于搜索请求,会打到所有的primary shard(或者是它的某个replica shard也可以)
    hits.total:查询结果的数量,3个document
    hits.max_score:score的含义,就是document对于一个search的相关度的匹配分数,越相关,就越匹配,分数也高
    hits.hits:包含了匹配搜索的document的详细数据
  • query DSL  查询语法:

  • GET /ecommerce/product/_search
    {
      "query": {"match_all": {}}      //查询索索的商品
    }

    DSL:Domain Specified Language,特定领域的语言
    http request body:请求体,可以用json的格式来构建查询语法,比较方便,可以构建各种复杂的语法,比query string search肯定强大多了GET /ecommerce/product/_search
    {
      "query": {
        "match": {
          "name": "yagao"   //商品的名字
        }
      },
      "sort": [             //对商品按照字段进行排序
        {
          "price":"desc"    
        }
      ],
      "from": 1,      //对商品进行分页
      "size": 1
    }

  • query filter         filter(关键词)进行查询的过滤

  • 全文检索:match     全文检索会将输入的搜索串拆解开来,去倒排索引里面去一一匹配,只要能匹配上任意一个拆解后的单词,就可以作为结果返回           将匹配到分数最高的数据放到最前面,分数越高,排的地方越往前

  • phrase search(短语搜索)  match_phrase

    跟全文检索相对应,相反。  
    phrase search,要求输入的搜索串,必须在指定的字段文本中,完全包含一模一样的,才可以算匹配,才能作为结果返回

  • highlight search(高亮搜索结果)

         写法: "highlight": {
                       "fields": {
                               "producer": {}
                          } 

            效果: "highlight": {
                           "producer": [
                            "special <em>yagao</em> <em>producer</em>"
                             ]
                         }

扩容:垂直扩容和水平扩容;

垂直扩容:用更加强大的服务器替换老的服务器;

水平扩容:利用相同的服务器进行扩容;是经常采用的方案。

master节点:管理es的元数据(索引的创建和删除,维护索引的元数据,节点的增加和移除,维护节点元数据),master节点不承载节点请求,所以不会称为一个单点瓶颈。

节点:每个节点都可以接收所有的请求,并且每个节点都可以根据请求去相应的节点进行数据的搜索。集群中节点之间是对等的。

  • 一个index会包含多个shard
  • 每个shard是一个最小的数据存放单元,本身就是一个lucene,一个document只能存储到一个shard中,完整的建立索引和处理i 请求的能力
  • 每个replica都会承载一些读请求
  • primary shard的数量在创建的时候已经固定了
  • primary和replica不能放到同一个节点上的
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值