ElasticSearch学习笔记

来源:互联网 发布:macbook air必备软件 编辑:程序博客网 时间:2024/05/23 21:59

开始学习ElasticSearch,做点笔记,增强记忆

一、ElasticSearch基本概念

        1、NRT  (Near RealTime)  

              ElasticSearch是一个近乎实时的搜索,之所以说近乎实时,是因为从你插入文档和这个文档变为可搜索会有一段延迟,通常为1秒

        2、cluster 集群 

              1个以上的node(节点)可组成一个集群,当然一个节点也可组成一个集群,不过没什么意义。cluster 通过cluster.name来标识,多个node需要根据cluster.name来加入集群cluster。cluster.name的默认名字是elasticsearch

        3、Node 节点

              1个node是cluster中的一个服务器,提供索引和搜索能力。node也通过一个名称来标识。默认是一个在启动时自动生成的UUID。这个名称被用在节点间的通讯等场合。一个cluster可以有任意多个node。

        4、Index  索引

              Index在ES中是很重要的概念,相当于MongoDB中的DB。Index同样通过一个名称来标识,这个名称必须是小写。一个集群中可以有任意多个Index。

        5、Type  分类

              Index可以由一个或多个Type组成。注意,Type是一个逻辑概念。相当于关系数据库中的表。

        6、Documents  文档

               Document代表一个文档,相当于关系型数据库中的一条记录,是数据的基本组成单位。Document以JSON的形式存在。需要注意的是,一个Document虽然在物理存储上存储在Index中,但在逻辑存储上,它必须归属于Index中的一个Type。

        7、Shards和Replicas

               在实际项目中,一个Index可能存储大量的数据,比如1TB,这种情况下很有可能超出了存储介质实际的存储容量。即使能够存的下,也会大大降低搜索的速度,这个时候就可以将一个Index分成多个片,叫Shard(碎片)。每个Shard也是一个具备完整功能且独立的“Index”。

               在网络或云环境中,ES任何时刻都有可能发生故障,这时候就需要有失效备援的机制,防止未知原因下Shard或者节点突然的掉线或消失。ES允许你做1个以上的碎片复制,这种复制的碎片叫Replica Shards,简称为Replica。

               总结一下,一个Index可以被分割为多个Shard,一个Index同样可以有0或多个的复制(备份)。一旦被复制,每个Shard就有主Shard和Shard副本,Shard副本的数量在Index创建的时候定义,在Index创建后你就改不了了。



二、API 惯例、规则   

        1、大多数API都支持index参数,它的值可以是test1,test2,test3这种形式,也可以使用通配符test*,*test,te*st等,如果是_all那就是作用于所有index,也支持使用+\-号(+test*,-test3,当然,一些作用对象是单个索引的API就不支持这个特性了。

    2、Date  math  support in index name  (索引名称的日期数学运算)

       格式:<static_name{date_math_expr{date_format|time_zone}}>  

       所有表达式必须是经过URIEncode编码的。 GET   /<logstash-{now/d}>/_search  请求必须写成  GET /%3Clogstash-%7Bnow%2Fd%7D%3E/_search。

       假如当前日期是2020年5月20日中午12:30  ,Date  math表达式为<logstash-{now/d}>,那当前日期将被解析为:logstash-2024.03.22。

       以下是官网给出的例子:

       <logstash-{now/d}>                logstash-2024.03.22

       <logstash-{now/M}>                logstash-2024.03.01  

       <logstash-{now/M{YYYY.MM}}>       logstash-2024.03  

       <logstash-{now/M-1M{YYYY.MM}}>    logstash-2024.02  

       <logstash-{now/d{YYYY.MM.dd|+12:00}}>   logstash-2024.03.23   

        注意最后一个的写法:+12h  加上12小时 

    3、 通用的可选参数  

        1)pretty=true/false 返回结果数据是否以漂亮的格式展示

        2)human=true/false  返回结果数据是否以人类易读形式显示

        3)Date  math 操作   +1h  +1M(月份)  +1m(分钟) +1y 等等

        4)返回结果过滤  GET /_search?q=elasticsearch&filter_path=took,hits.hits._id,hits.hits._score ,返回的格式如下:

             {
  "took" : 3,
  "hits" : {
    "hits" : [
      {
        "_id" : "0",
        "_score" : 1.6375021
       }
             ]
   }  
      } 

        5)flat_settings  是否以扁平方式显示 =true 和 =false的返回结果分别是:

        true ->  {
    "twitter" : {
    "settings": {
      "index.number_of_replicas": "1",
      "index.number_of_shards": "1",
      "index.creation_date": "1474389951325",
      "index.uuid": "n6gzFZTgS664GUfx0Xrpjw",
      "index.version.created": ...,
      "index.provided_name" : "twitter"
    }
    }
       }

        false  ->   {
  "twitter" : {
       "settings" : {
             "index" : {
          "number_of_replicas": "1",
          "number_of_shards": "1",
          "creation_date": "1474389951325",
          "uuid": "n6gzFZTgS664GUfx0Xrpjw",
          "version": {
                "created": ...
                   },
                   "provided_name" : "twitter"
              }
        }
  }
    } 

        6) 还有一些其他的error_trace等可选参数,不一一列举

     4、基于URL的访问控制  URL-based  access control

三、文档API  

    

        

        

       

1 0