ES或Elasticsearch是一個被廣泛用于大規模數據分析和搜索的分布式搜索引擎。 它可以存儲和檢索JSON(JavaScript Object Notation)對象,這使得ES可以處理非常復雜的數據。 在本文中,我們將討論如何存儲復雜JSON數據庫。
在ES中,復雜JSON可以使用嵌套對象或嵌套數組來表示。 例如,下面是一個包含嵌套數組的JSON:
{ "name": "John Doe", "age": 32, "hobbies": [ { "name": "reading", "level": "advanced" }, { "name": "swimming", "level": "beginner" } ] }
要將此JSON存儲在ES中,我們需要創建一個索引,并在索引中定義我們要存儲的字段和類型。 以下是如何定義上述JSON的索引:
PUT /my_index { "mappings": { "properties": { "name": { "type": "text" }, "age": { "type": "integer" }, "hobbies": { "type": "nested", "properties": { "name": { "type": "text" }, "level": { "type": "text" } } } } } }
這個索引定義了三個字段:name、age和hobbies。 name和age字段具有簡單類型(文本和整數),而hobbies字段是嵌套的,需要使用嵌套類型進行定義。 在嵌套類型的定義中,我們還需要定義嵌套字段的類型。
現在,我們可以將JSON對象插入索引中:
POST /my_index/_doc { "name": "John Doe", "age": 32, "hobbies": [ { "name": "reading", "level": "advanced" }, { "name": "swimming", "level": "beginner" } ] }
我們可以使用嵌套查詢來查詢和過濾嵌套對象。 例如,如果我們想查找具有高級閱讀愛好的所有人,我們可以使用以下查詢:
GET /my_index/_search { "query": { "nested": { "path": "hobbies", "query": { "bool": { "must": [ { "match": { "hobbies.name": "reading" } }, { "match": { "hobbies.level": "advanced" } } ] } } } } }
這個查詢查找具有「reading」和「advanced」愛好的人。 使用嵌套查詢,我們可以輕松地處理更加復雜的JSON數據庫。