Analysis(分析)是将 full text(全文)转化为 terms(词条)的过程。使用不同的 analyzer(分词器),**FOO BAR**,``**Foo-Bar**,``**foo**,**bar**
这些短语可能都会生成
foo 和 **
bar `**`两个词条,实际的 **index**(索引)里面存储的就是这些 **terms**(词条)`_`。`_`针对
FoO:bAR的 full text query(全文检索),会先将其分析成为 foo,`bar 这样的词条,然后匹配存储在 index(索引)中的 term(词条)。正是这个 analysis(分析)的过程(发生在索引和搜索时)使得 elasticsearch 能够执行 full text queries(全文检索)。也可以参阅 text(文本)和 term(词条)了解更多细节信息。```
cluster(集群)是由拥有同一个集群名的一个或者多个节点组成。每个集群拥有一个主节点,它由集群自行选举出来,在当前主节点挂了,能被其他节点取代。
document(文档)是存储在elasticsearch中的json文档。类似于关系型数据库中的一行记录。每个文档存储在一个index(索引)中,它具有一个type(类型)和一个id。文档是包含零到多个fields(属性)或者键值对的json对象(类似于其他语言中的hash/hashmap/associative array)。当一个文档被indexed(索引)的时候,它的原始json文档会被存储成_source属性,对该文档进行get或者search操作时,默认返回的就是改属性。
文档的ID标识一个文档。文档的index/type/id必须唯一。如果没有提供ID,elasticsearch会自动生成一个ID。(查询routing(路由)获取更多信息)
一个文档包涵一系列的属性或者键值对。它的值可以是简单标量值(如字符串,整型数,日期),或者是像数组和对象一样的嵌套结构。属性类似于关系型数据库中的列。每个属性的mapping(映射)都有其类型(不同于document(文档)的type(类型)),表明该属性能存储成改类型的数据,例如 integer
, string
, object。**mapping**(映射)也允许你定义属性的值是否需要**analyzed**(分词)。
index(索引)类似于关系型数据库中的表。它有一个mapping(映射)来定义索引中的fields(属性),这些属性被分组成多种type(类型)。索引是一个逻辑命名空间,它对应一到多个primary shards(主分片)和零到多个replica shards(副本分片)。
mapping(映射)类似于关系型数据库中的元数据定义。每一个index(索引)对应一个mapping(映射),它定义了index(索引)中的每一个type(类型),另外还有一些索引级别的设置。mapping(映射)可以显式定义,或者当一个文档进行索引时自动生成。
node(节点)是从属于一个elasticsearch集群的正在运行的节点。当以测试为目的时,可以在一台主机上启动多个节点,但是通常一台主机最好运行一个节点。在启动时,节点会使用广播的方式,自动感知(网络中)具有相同集群名的集群,并尝试加入它。
每个文档存储在单primary shard (主分片)中。当索引一个文档时,它会首先被索引到主分片上,然后索引到主分片的所有副本上。默认情况下,一个index(索引)有5个primary shard (主分片)。根据index(索引)的处理能力,你可以指定更少或者更多的primary shard (主分片)来扩展文档数量。当index(索引)创建之后,primary shard (主分片)的数量不可更改。查询routing(路由)获取更多信息。
每一个primary shard (主分片)拥有零到多个副本。副本是primary shard (主分片)的拷贝,它的存在有两个目的:
当你索引一个文档时,它会被存储在一个单独的主分片上。通过对routing值进行哈希计算来决定具体是哪一个主分片。默认情况下,routing值是来自于文档ID,如果文档指定了一个父文档,则通过其父文档ID(保证父子文档存储在同一个分片上)。如果你不想使用默认的文档ID来作为routing值,你可以在索引时直接指定一个routing值,或者在mapping中指定一个字段的值来作为routing值。
shard(分片)是一个Lucene实例。它是由elasticsearch管理的低层次的工作单元。index(索引)是指向 主分片和副本分片的逻辑命名空间。除了定义index(索引)应该具有的primary shard(主分片)和replica shard(副本分片)的数量之外,你不需要对shard(分片)作其它的工作。相反,你的代码应该只处理index(索引)。elasticsearch将shards(分片)分配到整个集群的所有节点上,当节点失败时可以自动将分片迁移到其他节点或者新增的节点上。
在默认情况下,你索引的json document(文档)会存储在_source field(属性)中,get和search请求会返回该field(属性)。这样可以直接在搜索结果中获取原始文档对象,不需要通过ID再检索一次文档对象。
term(词条)是elasticsearch中被索引的确切值。foo
, Foo
, FOO 这些**term**(词条)不相等。**term**(词条)可以通过词条搜索来检索。查询**text**(文本)和**anaylsis**(分词)获取更多信息。
text(文本)(或者说全文)是普通的非结构化文本,如一个段落。默认情况下,text(文本)会被analyzed(分词)成term(词条),term(词条)是实际存储在索引中的内容。文本的field(属性)必须在索引时完成analyzed(分词)来支持全文检索的功能,全文检索使用的关键词也必须在搜索时analyzed(分词)成索引时产生的相同term(词条)。查询term(词条)和analysis(分词)获取更多信息。
type(类型)代表文档的类型,如一封邮件,一个用户,一条推文。搜索API可以通过文档类型来过滤。index(索引)可以包涵多个类型,每一个type(类型)有一系列的fields(属性)。同一个index(索引)中不同type(类型)的同名fields(属性)必须使用相同的mapping(映射)(定义文档的属性如何索引以及是文档能被搜索)。