多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php框架 > 框架設計 > [Elasticsearch] 索引管理 (四) - 動態映射

[Elasticsearch] 索引管理 (四) - 動態映射

來源:程序員人生   發布時間:2015-01-04 09:31:27 閱讀次數:4126次

動態映照(Dynamic Mapping)

當ES在文檔中碰到1個之前沒見過的字段時,它會利用動態映照來決定該字段的類型,并自動地對該字段添加映照。

有時這正是需要的行動,但有時不是。你也許不知道在以后你的文檔中會添加哪些字段,但是你想要它們能夠被自動地索引。也許你只是想要疏忽它們。或 - 特別當你將ES當作主要的數據存儲使用時 - 大概你會希望這些未知的字段會拋出異常來提示你注意這1問題。

榮幸的是,你可以通過dynamic設置來控制這1行動,它能夠接受以下的選項:

  • true:默許值。動態添加字段
  • false:疏忽新字段
  • strict:如果碰到陌生字段,拋出異常

dynamic設置可以適用在根對象上或object類型的任意字段上。你應當默許地將dynamic設置為strict,但是為某個特定的內部對象啟用它:

PUT /my_index { "mappings": { "my_type": { "dynamic": "strict", "properties": { "title": { "type": "string"}, "stash": { "type": "object", "dynamic": true } } } } }

my_type對象上如果碰到了未知字段則會拋出1個異常。 在stash對象上會動態添加新字段。

通過以上的映照,你可以向stash添加新的可搜索的字段:

PUT /my_index/my_type/1 { "title": "This doc adds a new field", "stash": { "new_field": "Success!" } }

但是,如果在頂層對象上試圖添加新字段則會失敗:

PUT /my_index/my_type/1 { "title": "This throws a StrictDynamicMappingException", "new_field": "Fail!" }

NOTE

dynamic設置為false其實不會改變_source字段的內容 - _source字段依然會保存你索引的全部JSON文檔。只不過是陌生的字段將不會被添加到映照中,以致于它不能被搜索到。


自定義動態映照

如果你知道你需要動態的添加的新字段,那末你或許會啟用動態映照。但是有時動態映照的規則又有些不夠靈活。榮幸的是,你可以調劑某些設置來讓動態映照的規則更加合適你的數據。

date_detection

當ES碰到1個新的字符串字段時,它會檢查該字串是不是含有1個可被辨認的日期,比如2014-01-01。如果存在,那末它會被辨認為1個date類型的字段。否則會將它作為string進行添加。

有時這類行動會致使1些問題。如果你想要索引1份這樣的文檔:

{ "note": "2014-01-01" }

假定這是note字段第1次被發現,那末根據規則它會被作為date字段添加。但是如果下1份文檔是這樣的:

{ "note": "Logged out" }

這時候該字段明顯不是日期,但是已太遲了。該字段的類型已是日期類型的字段了,因此這會致使1個異常被拋出。

可以通過在根對象上將date_detection設置為false來關閉日期檢測:

PUT /my_index { "mappings": { "my_type": { "date_detection": false } } }

有了以上的映照,1個字符串總是會被當作string類型。如果你需要1個date字段,你需要手動地添加它。

NOTE

ES中辨認日期的方法可以通過dynamic_date_formats設置改變。

dynamic_templates

通過dynamic_templates,你可以具有對新字段的動態映照規則具有完全的控制。你設置可以根據字段名稱或類型來使用1個不同的映照規則。

每一個模板都有1個名字,可以用來描寫這個模板做了甚么。同時它有1個mapping用來指定具體的映照信息,和最少1個參數(比如match)用來規定對甚么字段需要使用該模板。

模板的匹配是有順序的 - 第1個匹配的模板會被使用。比如我們可以為string字段指定兩個模板:

  • es:以_es結尾的字段應當使用spanish解析器
  • en:其它所有字段使用english解析器

我們需要將es模板放在第1個,由于它相比能夠匹配所有字符串字段的en模板更加具體:

PUT /my_index { "mappings": { "my_type": { "dynamic_templates": [ { "es": { "match": "*_es", "match_mapping_type": "string", "mapping": { "type": "string", "analyzer": "spanish" } }}, { "en": { "match": "*", "match_mapping_type": "string", "mapping": { "type": "string", "analyzer": "english" } }} ] }}}

match_mapping_type允許你只對特定類型的字段使用模板,正如標準動態映照規則那樣,比如stringlong等。

match參數只會匹配字段名,path_match參數用于匹配對象中字段的完全路徑,比如address.*.name可以匹配以下字段:

{ "address": "city": "name": "New York" } } }

unmatchpath_unmatch模式能夠用來排除某些字段,沒有被排除的字段則會被匹配。

更多的配置選項可以在根對象的參考文檔中找到。


生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 毛片三级在线观看 | 亚洲午夜久久久精品影院 | 精品国产欧美一区二区 | 欧美亚洲自拍偷拍 | 亚洲美日韩 | 红豆视频日本高清 | 国产性tv国产精品 | 黑人巨大videosjapan高清 黑人巨大xxx | 黄色小说校园春色 | 亚洲片在线观看 | 国产图片区| 伊人久久成人爱综合网 | 久久se精品一区精品二区 | 午夜在线网站 | 中文字幕爱爱 | 波多野结衣一区二区在线 | 久久久久爽亚洲精品 | 国产一级视频久久 | 97久久综合区小说区图片专区 | 最近中文字幕大全高清视频 | 日本护士和病人xxxxx | babes性欧美高清 | 亚洲欧美综合视频 | 五月婷婷免费视频 | 欧美人xxxx | 国产成人咱精品视频免费网站 | xxxxx免费 | 亚洲国产欧美在线人网站 | 最近手机中文字幕高清1 | 亚洲色图1 | 尤物免费在线视频 | 久久精品观看影院2828 | 欧美午夜在线观看 | 九九精品成人免费国产片 | 成人精品一区二区三区中文字幕 | 中文字幕在线观看网址 | 性精品| 精品国产中文一级毛片在线看 | 香港黄页精品视频在线 | 人人爽人人爱 | 一区二区三区高清不卡 |