分析(analysis)
分析是把正文(full text)分解为语汇(terms)的过程。根据分析器的不同,短语: “FOO BAR
”, “Foo-Bar
”, “foo,bar
” 都会被分解成“foo
” 和“bar
”. 语汇是真正保存在索引中的。
一个全文的查询(非语汇查询),比如:“FoO:bAR
” 会被分析器分解为“foo
”,“bar
”的语汇,进而匹配索引保存的内容。
这个分析过程(包括建立索引阶段和查询阶段)就使正文的全文查询成为可能。
集群(cluster)
一个集群包含具有相同集群名称的一个或者多个结点(nodes)。集群会在所有的结点中自动选择一个作为主节点(master node),如果主节点fail 则会自动选择另外一个结点作为主节点。
文档(document)
elasticsearch中的一个document就是以JSON格式保存的一个文档。它类似于关系数据库中的一个表中的一条记录。每一个document保存在一个索引(index)中,并拥有唯一的类型(type)和标识(id)
每个document实际上是一个JSON object对象(在其他语言中可以是hash,hashmap,或者关联数组),包含0个或者多个属性(fields)或者键值对。
原生的JSON document 被保存在_source 属性里。当直接搜索一个document的时候会默认返回。
标识(id)
id是文档(document)的唯一标识。一个文档的index/type/id是唯一的。如果不提供ID,系统会自动生成。
属性(field)
一个document包含一系列属性(fields)或键值对。field的值可以是简单类型,如string,integer或者date,也可以是复杂的数组或者对象类型。field类似于关系数据库中表列的概念。
mapping定义的的是每个field的类型属性(要与document的type区分开)可用什么类型的数据(如integer, string
, object
)保存在这个field中。mapping也可以用于定义属性里的值如何被分析。
索引(index)
索引相当于关系数据库里的数据库。它包含一个映射关系(mapping)用来定义多种类型。索引是一种逻辑意义上的命名空间,对应一个或多个主分片或者零个或多个副本分片。
映射关系(mapping)
mapping类似于数据库中的定义schema,每个索引有一套映射关系,定义了索引中的每一种类型(type),并附带了一些索引范围的设置。映射关系既可以明确定义,也可以在建立索引的时候自动生成。
结点(node)
结点指的是elasticsearch集群中运行的一个实例。测试环境时可以在一台服务器上起多个结点,通常来说一服务器一节点。启动时,结点通过单播(或者多播,如果指定)的方式在现有集群中寻找同名的集群,并自动加入。
主分片(primary shard)
每个document都保存在单独的主分片里。当对一个document做索引的时候,首先对主分片做索引,然后在所有主分片的副本(replicas)里做索引。
默认一个索引有5个主分片,可以调整主分片的数量以控制一个索引中容纳document的数量。索引创建之后,不可以更改主分片数。
副本分片(replica shard)
每个主分片可以有0个或者多个副本。副本是主分片的拷贝,有两个作用:
1. 提高故障转移效率:如果主分片宕机,副本分片可以被提升至主分片。
2. 提高性能:搜索访问可以分布在主分片和副本分片之间。
默认每个主分片有一个副本分片,但副本分片数量可以在已经存在的索引上动态调整。在同一个结点上,副本分片不会被当做主分片启动。
路由(routing)
当对一个document做索引的时候,是保存在单独的分片里的。该分片是根据routing 值的hash得到。默认,routing值根据document的id得到,如果文档有父文档,那么要根据父文档得到(为了让子文档和父文档在同一个索引分片里)。这个值也可在索引时指定覆盖,也可以通过设置mapping里的routing field指定。
分片(shard)
每个分片是一个单独的lucene实例,它是被elasticsearch管理的一个个低等级的“worker”。一个索引(index)是指向所有主分片和副本的逻辑命名空间。
在代码级别,只需要关心索引就好了,不用关心索引里的主分片和副本分片。
elasticsearch的分布式分片管理集群中的所有结点。而且当一个结点失效的时候可以自动转移失效结点的分片到其他结点。也可以自动添加新结点。
源属性(source field)
默认JSON格式的document保存在_source 属性里并且在所有的搜索请求里返回。这样的好处是可以从搜索结果里就可以访问到原始对象,而不用再通过ID单独访问一次。
语汇(term)
语汇是在elasticsearch中索引的精确值。foo, Foo
, FOO 这些语汇在elasticsearch中是不同的。terms可以通过term 查询准确查找。
正文(text)
正文是普通的非结构化文本,例如这篇文章。默认,正文是被分析器分解成多个语汇,保存在索引中的。
正文需要在建立索引中被分析以便可以被搜索,在搜索正文的查询中,查询关键字也会被分析器拆分成与索引相同的语汇单元。
类型(type)