ES是一個流行的開源分布式搜索和分析引擎,它的存儲功能可以存儲大量的數據。其中一個常見的問題是如何存儲大Json字段。
首先,我們需要意識到Json數據類型可以包含很多不同的數據結構。這意味著在存儲和搜索Json數據時,我們需要能夠使用其內部字段來過濾和查詢文檔數據。對于大Json字段的存儲,這可能會導致性能和存儲方面的挑戰。
在ES中,我們可以使用child/parent數據關系模型來解決這個問題。這個模型允許我們將Json數據分成兩部分:一個父文檔和一個或多個子文檔。父文檔包含基本信息,而子文檔則包含大Json字段中的數據。
PUT /myindex { "mappings": { "parenttype": {}, "childtype": { "_parent": { "type": "parenttype" } } } }
這里我們創建了兩個類型:一個父類型和一個子類型,我們為子類型設置了_parent字段。這意味著子文檔將與父文檔建立關系。
接下來,我們需要在索引中為文檔定義父子關系:
PUT /myindex/parenttype/1 { "name": "Parent Document" } PUT /myindex/childtype/1?parent=1 { "big_json_field": { "key1": "value1", "key2": "value2", "key3": "value3", ... "keyN": "valueN" } }
我們在這里插入了一個父文檔和一個子文檔,并使用"parent"屬性來定義它們之間的父子關系。
一旦數據被索引,我們可以使用子文檔的大小來限制查詢數據:
GET /myindex/childtype/_search { "query": { "has_parent": { "parent_type": "parenttype", "query": { "match_all": {} }, "inner_hits": { "_source": { "include": ["big_json_field"] }, "size": 10 } } } }
這個查詢使用了has_parent查詢來查找與父文檔匹配的所有子文檔。我們可以在inner_hits中指定_sub要返回的子字段的選項。
在ES中存儲大Json字段并不是一個容易的任務,但使用child/parent關系模型可以幫助我們優化性能和存儲。
上一篇vue css 順序
下一篇vue商品詳情規格