ElasticSearch入门--索引

ElasticSearch介绍

ElasticSearch是文档型数据库,索引(Index)定义了文档的逻辑存储和字段类型,每个索引可以包含多个文档类型,文档类型是文档的集合,文档以索引定义的逻辑存储模型,比如,指定分片和副本的数量,配置刷新频率,分配分析器等,存储在索引中的海量文档分布式存储在ElasticSearch集群中。

ElasticSearch是基于Lucene框架的全文搜索引擎,将所有文档的信息写入到倒排索引(Inverted Index)的数据结构中,倒排索引建立的是索引中词->文档之间的映射关系,在倒排索引中,数据是面向词(Term)而不是面向文档的。

ElasticSearch的对象模型,跟关系型数据库模型相比:

  • 索引(Index):相当于数据库,用于定义文档类型的存储;在同一个索引中,同一个字段只能定义一个数据类型;
  • 文档类型(Type):相当于关系表,用于描述文档中的各个字段的定义;不同的文档类型,能够存储不同的字段,服务于不同的查询请求;
  • 文档(Document):相当于关系表的数据行,存储数据的载体,包含一个或多个存有数据的字段;
    • 字段(Field):文档的一个Key/Value对;
    • 词(Term):表示文本中的一个单词;
    • 标记(Token):表示在字段中出现的词,由该词的文本、偏移量(开始和结束)以及类型组成;

索引是由段(Segment)组成的,段存储在硬盘(Disk)文件中,段不是实时更新的,这意味着,段在写入磁盘后,就不再被更新。ElasticSearch引擎把被删除的文档的信息存储在一个单独的文件中,在搜索数据时,ElasticSearch引擎首先从段中查询,再从查询结果中过滤被删除的文档,这意味着,段中存储着“被删除”的文档,这使得段中含有”正常文档“的密度降低。多个段可以通过段合并(Segment Merge)操作把“已删除”的文档将从段中物理删除,把未删除的文档合并到一个新段中,新段中没有”已删除文档“,因此,段合并操作能够提高索引的查找速度,但段合并是IO密集型的操作,需要消耗大量的硬盘IO。


创建索引

在创建索引之前,首先了解RESTful API的调用风格,在管理和使用ElasticSearch服务时,常用的HTTP动词有下面五个:

  • GET 请求:获取服务器中的对象
    • 相当于SQL的Select命令
    • GET /blogs:列出所有博客
  • POST 请求:在服务器上更新对象
    • 相当于SQL的Update命令
    • POST /blogs/ID:更新指定的博客
  • PUT 请求:在服务器上创建对象
    • 相当于SQL的Create命令
    • PUT /blogs/ID:新建一个博客  
  • DELETE 请求:删除服务器中的对象
    • 相当于SQL的Delete命令
    • DELETE /blogs/ID:删除指定的博客
  • HEAD 请求:仅仅用于获取对象的基础信息

禁用自动创建索引

推荐设置:在全局配置文件 elasticsearch.yml 中,禁用自动创建索引:

action.auto_create_index:false

手动创建索引

创建索引的语法是:

PUT http://host:port/index_name/  + index_configuration

其中,index_name是创建的索引的名字,indiex_configuration 是向ElasticSearch服务器传递的请求负载的主体,数据格式json,用于定义索引的配置信息:映射节(mappings)和配置节(settings)。在创建索引时,需要精心设计索引的映射节(mappings)和配置节(settings)。栗子如下:

PUT http://localhost:9200/blog/

注意,ElasticSearch引擎是大小写敏感的,强制性要求索引名和文档类型小写,对于字段名,ElasticSearch引擎会将首字母小写,建议在配置索引,文档类型和字段名时,都使用小写字母。


索引映射节(mappings)

索引结构

索引是由文档类型构成的,在mappings字段中定义索引的文档类型,示例代码中为blog索引定义了三个文档类型:articles,followers和comments

{  
   "mappings":{  
      "articles":{ },
      "followers":{ },
      "comments":{ }
   }
}

文档属性

文档属性定义了文档类型的共用属性,适用于文档的所有字段:

  • dynamic_date_formats属性:该属性定义可以识别的日期格式列表;
  • dynamic属性:默认值为true,允许动态地向文档类型中加入新的字段。推荐设置为false,禁止向文档中添加字段,这样,文档类型的所有字段必须在索引映射的properties属性中显式定义,在properties字段中未定义的字段都将会ElasticSearch忽略。
    • dynamic设置为ture:默认值,新增加的字段被添加到索引映射中;
    • dynamic设置为false:新增加的字段会被忽略;
    • dynamic设置为strict:当向文档中新增字段时,ElasticSearch引擎抛出异常;
{  
   "mappings":{  
      "articles":{  "dynamic":false,
         "dynamic_date_formats":["yyyy-MM-dd hh:mm:ss", "yyyy-MM-dd" ],
         "properties":{  
            "id":{},
            "title":{},
            "author":{},
            "content":{},
            "postedat":{}
         }
      }
   }
}

文档的字段属性

字段的数据类型

字段的数据类型由字段的属性type指定,ElasticSearch支持的基础数据类型主要有:

  • 字符串类型:string;
  • 数值类
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值