公號:碼農充電站pro
主頁:https://codeshellme.github.iohtml
一般在使用 ES 構建數據模型時,須要考慮如下幾點:git
對於不一樣類型的數據,主要考慮下面幾點:github
true
。對於搜索需求,主要考慮如下幾點:shell
對於聚合與排序,主要考慮如下幾點:網絡
false
。false
。true
(能夠達到利用緩衝的目的,提升性能)。將 store 設置爲 true
(默認爲 false
),能夠存儲字段的原始內容;通常在 _source 的 enabled 爲 false
時使用。app
若是須要對一些圖書信息進行建模,需求以下:elasticsearch
示例數據以下:ide
{ "title":"Mastering ElasticSearch 5.0", "description":"Master the searching, indexing, and aggregation features in ElasticSearch Improve users’ search experience with Elasticsearch’s functionalities and develop your own Elasticsearch plugins", "author":"Bharvi Dixit", "public_date":"2017", "cover_url":"https://images-na.ssl-images-amazon.com/images/I/51OeaMFxcML.jpg" }
若是不手動設置 mapping,那麼每一個字段將被 ES 設置爲以下類型:性能
{ "type" : "text", # text 類型 "fields" : { # 並添加一個 keyword 子字段 "keyword" : { "type" : "keyword", "ignore_above" : 256 } } }
下面根據需求,手動設置 mapping:優化
PUT books { "mappings": { "properties": { "author": { "type": "keyword" }, "cover_url": { "type": "keyword", "index": false # 不須要支持搜索 }, "description": { "type": "text" }, "public_date": { "type": "date" }, "title": { "type": "text", "fields": { "keyword": { "type": "keyword", "ignore_above": 100 } } } } } }
若是如今須要添加一個字段 content
,用於存儲圖書的內容,所以該字段的信息量將很是大,這將致使 _source 的內容過大,致使過大的網絡開銷。
爲了優化,能夠將 _source 的 enabled 設置爲 false
,而後將每一個字段的 store 設置爲 true
(打開額外存儲)。
以下:
PUT books { "mappings": { "_source": { "enabled": false # enabled 爲 false }, "properties": { "author": { "type": "keyword", "store": true # store 爲 true }, "cover_url": { "type": "keyword", "index": false, "store": true # store 爲 true }, "description": { "type": "text", "store": true # store 爲 true }, "content": { "type": "text", "store": true # store 爲 true }, "public_date": { "type": "date", "store": true # store 爲 true }, "title": { "type": "text", "fields": { "keyword": { "type": "keyword", "ignore_above": 100 } }, "store": true # store 爲 true } } } }
將 _source 禁止掉以後,查詢的結果中就沒有了 _source 字段;若是須要哪些字段的內容,則須要設置 stored_fields,以下:
POST books/_search { "stored_fields": ["title","author","public_date"], "query": { "match": { "content": "searching" } } }
(本節完。)
推薦閱讀:
歡迎關注做者公衆號,獲取更多技術乾貨。