面向文檔
在應用程序中對象很少只是一個簡單的鍵和值的列表。通常,它們擁有更復雜的數據結構,可能包括日期、地理信息、其他對象或者數組等。
也許有一天你想把這些對象存儲在數據庫中。使用關係型數據庫的行和列存儲,這相當於是把一個表現力豐富的對象擠壓到一個非常大的電子表格中:你必須將這個對象扁平化來適應表結構--通常一個字段>對應一列--而且又不得不在每次查詢時重新構造對象。
Elasticsearch 是 面向文檔 的,意味着它存儲整個對象或 文檔_。Elasticsearch 不僅存儲文檔,而且 _索引每個文檔的內容使之可以被檢索。在 Elasticsearch 中,你 對文檔進行索引、檢索、排序和過濾--而不是對行列數據。這是一種完全不同的思考數據的方式,也是 Elasticsearch 能支持複雜全文檢索的原因。
JSON編輯
Elasticsearch 使用 JavaScript Object Notation 或者 JSON 作爲文檔的序列化格式。JSON 序列化被大多數編程語言所支持,並且已經成爲 NoSQL 領域的標準格式。 它簡單、簡潔、易於閱讀。
考慮一下這個 JSON 文檔,它代表了一個 user 對象:
{ "email": "[email protected]", "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" }
雖然原始的 user
對象很複雜,但這個對象的結構和含義在 JSON 版本中都得到了體現和保留。在 Elasticsearch 中將對象轉化爲 JSON 並做索引要比在一個扁平的表結構中做相同的事情簡單的多。