ElasticSearch(一)基础知识

目录

相关产品

全文索引

Lucene

lucene倒排索引

术语及概念

对外接口

API约定

多索引参数

日期筛选

通用参数

基于URL的访问控制

REST

HEAD插件

创建库

JAVA API


Elastic Search 是一个基于Lucene构建的开源、分布式、RESTful接口全文搜索引擎,也是一个分布式文档数据库

相关产品

  • Beats

一个代理,可以把数据发给ES。

  • Shield

权限控制,基于角色管理。收费项目

  • Watcher

警报和通知工具

  • Marvel

管理和监控工具。收费项目

全文索引

对每个词建立一个索引,指明该词在文章中出现的次数和位置。

Lucene

Lucene是一个全文索引引擎工具包,提供了完整的查询引擎和索引引擎,以及部分的文本分析引擎。

lucene倒排索引

不是由记录确定属性值,而是由属性值确定记录位置,因此称为倒排索引。带有倒排索引的文件称为倒排索引文件(reverted file)。

倒排索引中的对象为文档或者文档中的单词。用来存储单词或者文档在一个文档或一组文档中的位置。

搜索引擎的关键是建立倒排索引文件。倒排索引一般表现为一个关键词,它的频度,位置。

1、取得关键词:

2、建立倒排索引

3、实现

  • 词典文件(Term Dictionary)

  • 频率文件(frequencies)

  • 位置文件(positions)

  • field。信息所在位置,保存在词典文件中。

4、压缩算法

5、应用场景

术语及概念

1、索引词(term)

索引词是一个能够被索引的精确值。foo,Foo,FOO,是不同的索引词。

2、文本(text)

文本是一段普通的非结构化文字。搜索引擎应该能够根据索引词找到原文。

3、分析(analysis)

分析是把文本转化为索引词的过程。分析的结果依赖分词器。

4、集群(cluster)

5、节点(node)

6、路由(routing)

当存储一个文档,它会存储在唯一的一个主分片中,具体哪个分片通过散列值确定。

7、分片(shard)

分片是单个lucene实例。索引是指向主分片和副本分片的逻辑空间。

8、主分片(primary shard)

每个文档只存在在主分片中,然后复制到不同副本,默认一个索引有5个主分片

9、副本分片(replica shard)

每一个分片可以有0个多个副本。副本是针对每个分片的。分片个数 x 副本数量 = 总副本分片个数。

10、复制(replica)

每个索引可以拆分成多个分片。索引可以复制0个或多个分片。一旦复制,就有了主分片与副本分片。分片的数量和副本的数量可以在创建索引时创建。创建索引后可以修改副本的数量,但是不可以修改分片的数量。默认每个索引分配5个分片和一个副本,则集群至少需要2个节点,包括5分主分片和5个副本分片

11、索引(index)

索引是具有相同结构的文档集合。例如客户索引,目录索引,订单索引等。

12、类型(type)

在索引中可以定义一个或多个类型,类型是索引的逻辑分区。一般情况,一种类型被定义为具有一组公共字段的文档

13、文档(document)

存储的一个JSON格式字符串。每个存在在索引中的一个文档,都有一个ID和类型。每个文档都是一个JSON对象,存储了0个或多个字段(或者键值对),原始的JSON文档被存在一个叫做_source的字段中,索引返回值默认就是这个字段。

14、映射(mapping)

映射像关系数据库中的表结构,每个索引都有一个映射,定义了索引中的每个字段类型以及一个索引范围的设置。一个映射可以事先定义或者自动识别。

15、字段(field)

文档中包含0个或多个字段,字段可以是一个简单的值,也可以是数组或者嵌套对象。

16、来源字段(source field)

源文档被存在_source字段,索引时返回。

17、主键(ID)

文档的id/type/index必须是唯一的。

映射详解

字段数据类型

  • 字符串类型:string(3.x后改成了text类型)
  • 整数 : byte,short,integer,long
  • 浮点数:float,double
  • 布尔型: boolean
  • 日期: date

字段属性(约束条件)

  • type:指定该字段的数据类型,值为上述列出的“字段数据类型”,不指定的话,由elasticsearch自动判断。

  • index:指定该字段是否索引,接收值为true和false,字符串类型默认为true,其他的数据类型默认为false。值为true的话会做分词。值为false的话不分词,原样写入索引中。

  • ignore_above:接受整数值,如果字符串长度长于这个值,则不写入索引,不指定的话默认为0。

  • analyzer:如果该字段需要索引的话,指定索引时使用的分词器,不指定的话默认使用标准分词器分词。

  • search_analyzer:指定搜索时使用的分词器,不知道的话使用标准分词器分词。

  • store:值为yes和no,默认为no。指定是否将该字段的原始文档写入索引。在elasticsearch中,因为_source中(_source下面解析)已经存储了一份原始文档,在索引中再存储原始文档就多余了,所以Elasticsearch默认是把store属性设置为no。

  • include_in_all:指定该字段是否需要包含在_all中(_all下面解析),接收值为true和false,默认为flase。

  • null_value:如果该字段的值为null,则用该值代替。

  • format:格式化日期类型,比如:yyyy-MM-dd HH:mm:ss||yyyy-MM-dd。默认strict_date_optional_time||epoch_millis

元数据类型

每一个文档都有与之关联的元数据,元数据字段是为了保证系统正常运行内置字段,比如_index表示索引字段,_type表示类型,_id表示文档主键,这些字段都是以下划线开始的,除了这些元数据之外,还有两个很重要的元数据,它们是_all_source,这两个元数据字段可以在我们创建类型映射的时候,指定约束条件,我们接着来看看:

  • _source:

存储的文档的原始值。默认_source字段是开启的,也可以关闭。如果想要关闭_source字段,在mapping中的设置如下:

{
  "typename":{
      "_source":{
          "enabled":false
      },
      "properties": {
          ... 
      }
  }
}
 

 如果只想存储某几个字段的原始值到elasticsearch,可以通过incudes参数来设置,同样,可以通过excludes参数排除某些字段。在mapping中的设置如下:

{
  "typename":{
      "_source":{
          "includes":["field1","field2"],

          "excludes":["field3","field4"]
      },
      "properties": {
          ... 
      }
  }
}

  • _all:

包含全部内容的字段,默认是关闭的,开启_all字段的方法和_source类似,mapping中的配置如下:

{
 "typename": {
    "_all": {
       "enabled": true
    },
    "properties": {
          ... 
    }
 }
}

 也可以通过在字段中指定某个字段是否包含在_all中:

{
 "yourtype": {
    "typename": {
       "field1": {
           "type": "string",
           "include_in_all": false
        },
        "field2": {
           "type": "string",
           "include_in_all": true
        }
    }
 }
}

对外接口

ES对外接口以HTTP协议,以JSON格式REST约定对外提供。

HTTP配置放在elasticsearch.yml中,都是静态属性,必须重启生效。HTTP对外接口模块是可以禁用的,设置http.enabled = false 。

API约定

多索引参数

  • _all

全部索引

  • *

通配符,统配多个字符

  • ignore_unavailable

当索引不存在或关闭时,是否忽略索引。true、false

  • allow_no_indices

使用通配符查询索引,索引不存在时,是否返回失败。true、false。

  • expand_wildcards

控制通配符索引表达式匹配哪一类索引。包括open(开启),close(关闭),none(不可用),all(开启和关闭)

日期筛选

几乎所有API都支持日期筛选。

语法:

<static_name {date_math_expr{date_format|time_zone}}>

  • static_name :索引名称
  • date_math_expr:动态日期计算表达式
  • date_format:日期格式
  • time_zone:时区,默认UTC

例如:

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

通用参数

1、pretty

?pretty=true,返回JSON格式,或者

?format=yaml,YAML格式

2、human

?human=true,返回更适合人类阅读的格式

3、日期表达式

  • ||
  • 分割符号
  • +
  • 加一个单位
  • -
  • 减一个单位
  • /
  • 取整

支持的时间单位:y(年),M(月),w(周),d(日),H(时),m(分),s(秒)

4、响应过滤(filter_path)

通过filter_path过滤返回内容

?filter_path=took,hits*

支持通配符(*),逗号分割。

基于URL的访问控制

可以通过配置文件限制某个用户对索引的请求

REST

POST,GET,PUT,DELETE

HEAD插件

Head插件作为url请求工具,需要在服务器安装

http://host:port/_plugin/head

创建库

http:/*/secisland?pretty

返回:

{ "acknowledged":true} //表示成功

插入数据

修改文档

删除文档

删除库

JAVA API

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章