ElasticSearch的术语词汇表

analysis(分析)

分析是将全文转换为词语的过程。取决于使用何种分词器,这些短语:FOO BARFoo-Barfoo,bar都可能被分解为词语foobar。索引中存储的实际上是这些词语。对FoO:bAR进行一次全文查询(不是词语查询),也会分解为词语foobar,因此会和索引存储的词语相匹配。正是这一分词过程(在索引时间和搜索时间都有)使得ElasticSearch能够执行全文查询。还可以参考textterm

cluster(集群)

集群由一个或多个节点构成,这些节点使用相同的集群名称。每个集群都有一个主节点,集群会自动选择主节点,如果当前主节点发生故障,那么就会重新选择其他节点作为主节点。

document(文档)

ElasticSearch存储的文档是一种JSON格式的文档。它就像关系数据库中的一张表的一行数据。每个文档都存储在一个索引之中,具有一个类型和一个标识符。每个文档都是一个JSON对象(在其他语言也被称为Hash/HashMap/关联数组),它包含零个或多个字段或键值对。原始的JSON文档经过索引之后,便会存储在_source字段之中,当获取或搜索某个文档时,默认会返回_source字段。

id(标识符)

文档的标识符可以用来标识一个文档。一个文档的index/id必须是唯一的。如果没有提供标识符,那么ElasticSearch便会自动生成。(还可以参考routing

field(字段)

文档包含一个字段或键值对列表。该值可以是一个简单(标量)值(如字符串、整数、日期),或者是一个嵌套结构(如数组或对象)。字段类似于关系数据库中的表中的列。每个字段的映射都具有一个字段类型(不要和文档类型相混淆),它可以表示字段存储的数据类型(如integerstringobject)。映射还使得你能够定义(除其他事项外)如何分析某个字段的值。

index(索引)

索引类似于关系数据库中的表。索引具有一个映射关系,其中包含一个类型,而类型又包含索引中的字段。索引是一种逻辑命名空间,它映射至一个或多个主分片,还可以有零个或多个复制分片。

mapping(映射)

映射类似于关系数据库中的模式定义。每个索引都有一个映射,它定义了一个类型,再加上一些索引范围的设置。索引可以被显式地定义,也可以在索引文档时自动生成。

node(节点)

节点是一个正在运行的ElasticSearch实例,它属于一个集群。可以在单台服务器上启动多个节点进行测试,但是通常每台服务器应该只有一个节点。在启动时,节点将使用单播来发现具有相同集群名称的现有集群,然后将会尝试加入这个集群。

primary shard(主分片)

每个文档都存储在一个主分片之中。当你索引一个文档时,首先会在主分片上进行索引,然后会在主分片的所有复制分片上进行索引。在默认情况下,每个索引会有5个主分片。你可以指定更少或更多的主分片来缩放索引能够处理的文档数量。创建索引之后,你不能修改索引的主分片数量。还可以参考routing

replica shard(复制分片)

每个主分片可以有零个或多个复制。复制是主分片的拷贝,主要有两个用途:

  1. 增加故障转移能力:当主分片发生故障时,某个复制分片便会被提升为主分片。
  2. 提升性能:主分片和复制分片都可以处理获取和搜索请求。在默认情况下,每个主分片都有一个复制分片,但是你可以动态地修改现有索引的复制分片的数量。复制分片和它的主分片不应该在相同的节点之中启动。

routing(路由)

当你索引一个文档时,它会存储在一个主分片之中。你可以计算routing值的散列值来选择这个分片。在默认情况下,routing值源自于文档的标识符(ID);如果这个文档有一个明确的父文档,那么routing值则源自于父文档的标识符(这样才能确保子文档和父文档存储在相同的分片之中)。可以通过在文档索引时指定routing值或映射中的路由字段来覆盖这个值。

shard(分片)

分片是一个单个的Lucene实例。它是一种底层的“工作”单元,由ElasticSearch自动管理。索引是一个逻辑命名空间,它指向主分片和复制分片。除了定义一个索引应当具有的主分片数量和复制分片数量之外,你不需要直接引用分片。相反,你的代码应当只处理索引。ElasticSearch会将分片分布至集群中的所有节点之中,当节点发生故障或添加新的节点时,它会自动将分片从一个节点移动至另一个节点。

source field(来源字段)

在默认情况下,你索引的JSON格式的文档将会存储在_source字段之中,所有的获取和搜索请求都会返回该字段。这就使得你能够从搜索结果中直接访问原始对象,而不需要再根据某个ID来获取该对象

term(词语)

词语是一个精确值,它是ElasticSearch索引存储的实际内容。词语fooFooFOO是不相等的。你可以使用term查询来搜索词语(也就是精确值)。还可以参考textanalysis

text(文本)

文本(或全文)是普通的非结构化文本,例如本段文字。在默认情况下,文本将被分解为词语,这些词语就是在索引中存储的实际内容。文本字段需要在索引时进行分词,这样才能实现全文搜索;而全文查询中的关键字必须在搜索时进行分词,这样才能确保生成(并搜索)的词语和索引时生成的词语是相同的。还可以参考termanalysis

type(类型)

type可以用来表示文档的类型(例如,emailusertweet)。type已经被废除了,目前正在逐步移除这个术语。还以参考映射类型的移除计划