导语
前面3篇文章,做了个入门及实例,本文讲述Elasticsearch的数据特性。
面向文档的特性
对象在应用程序很少只是一个键和值的简单列表。往往,他们复杂的数据结构,可能包含日期、地理位置,其他对象或数组的值。
迟早你会想将这些对象存储在一个数据库中。试图用关系数据库的行和列来做这件事情,实在是相当超乎你的想象,把对象表示为一个非常大的电子表格:你必须使对象以适应表的模式(每个列一个属性字段),然而你每次检索它不得不重建它。
Elasticsearch是面向文档的,这就意味着它可以存储整个对象或文档。它不仅将它们存储,而且把每个文档的内容作为索引是为了方便让他们搜索。在Elasticsearch中,索引、搜索、排序和过滤文档数据(没有行的柱状数据)。这是一个关于数据完全不同的思考方式,也是Elasticsearch可以执行复杂的全文搜索的原因之一。
JSON
Elasticsearch使用JavaScript对象表示法,或JSON格式(文档的序列化格式)。JSON序列化支持大多数编程语言,已经成为了标准格式使用NoSQL标准。它很简单,简洁,易于阅读。
考虑这个JSON文档,它代表一个用户对象:
{
"email": "john@smith.com",
"first_name": "John",
"last_name": "Smith",
"info": {
"bio": "Eco-warrior and defender of the weak",
"age": 25,
"interests": [ "dolphins", "whales" ]
},
"join_date": "2014/05/01"
}
尽管最初的用户对象是复杂,对象的结构和含义一直保留在JSON版本。将一个对象转换为JSON作为在Elasticsearch的索引比等效过程中的平表结构(即用数据库表示一个对象,用数据库的字段属性进行索引字段进行索引,如果量巨大,则耗费时长过多)更简单。
注意
几乎所有的语言模块,将任意的数据结构或对象转换为JSON,但是细节是特定于每个语言。寻找模块处理JSON序列化或编组。官方的Elasticsearch Clients会自动处理将对象转换成JSON。
结语
Elasticsearch是面向文档的,存储数据是用JSON进行保存,以文档的方式进行索引。