日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Elasticsearch5.X Mapping万能模板

發布時間:2024/1/17 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Elasticsearch5.X Mapping万能模板 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

0、引言

在關系型數據庫如Mysql中,設計庫表需要注意的是:?
1)需要幾個表;?
2)每個表有哪些字段;?
3)表的主鍵及外鍵的設定——便于有效關聯。?
表的設計遵守范式約束,考慮表的可擴展性,避免開發后期對表做大的改動。?
Mysql或者Oracle中,修改數據類型相對比較簡單,通過命令行或者navicat、sqldeveloper等可視化工具直接修改。?
即便千萬級別數據量,多等點時間,也能修改好。

而在Elasticsearch非關系型數據存儲的搜索引擎中,設計表對應的就是Mapping的設計。?
且ES中一旦字段設定后,不能修改。?
當然,這也不是絕對的,可以通過新建索引,然后reindex將原有數據遷移到新索引。?
即便如此,還是建議:索引設計的前期,根據項目的需要設計好字段。如考慮如下的因素??
1)字段的大小,考慮最大、最小的情況,如某一個字段超過1MB甚至更多;?
2)字段需不需要分詞、全文檢索、其他類型的檢索;?
3)時間字段類型的設置,時間戳、UTC類型或者字符串類型;?
4) 字段需不需要聚合?
…….

這就引申出本文的內容,Elasticearch到底支持哪些數據類型?Elasticsearch如何進行數據選型??
有沒有直接拿來就用的Mapping萬能模板。?
以上問題,本文一一透徹解答。

1、Elasticsearch數據類型有哪些?

2、Elasticsearch數據如何選型?

2.1 字符串類型選型

text類型作用:分詞,將大段的文字根據分詞器切分成獨立的詞或者詞組,以便全文檢索。?
適用:email內容、某產品的描述等需要分詞全文檢索的字段;?
不適用:排序或聚合(Significant Terms 聚合例外)

keyword類型:無需分詞、整段完整精確匹配。?
適用于:email地址、住址、狀態碼、分類tags。

2.2 數值類型選型

long長整型:一個帶符號的64位整數,最小值為 -263 ,最大值為 263 -1。?
integer 整數:一個帶符號的32位整數,最小值為 -231 ,最大值為 231 -1。?
short 短整形:一個帶符號的16位整數,最小值為-32,768,最大值為32,767。?
byte 字節型:一個帶符號的8位整數,最小值為-128,最大值為127。?
double 雙精度浮點型:雙精度64位IEEE 754浮點數。?
float 單精度浮點型:單精度32位IEEE 754浮點數。?
half_float半精度浮點型:半精度16位IEEE 754浮點數。?
scaled_float:由長度固定的縮放因子支持的浮點數。?
以上,根據長度選型即可。

2.3 日期類型選型

{ “date”: “2015-01-01” }?
{ “date”: “2015-01-01T12:10:30Z” }?
{ “date”: 1420070400001 }?
如上,日期類型或者時間戳類型。

參考模板:?
“date”: {?
“type”: “date”,?
“format”: “yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis”?
}

2.4 布爾類型選型

布爾字段接受JSON true和false值,但也可以接受被解釋為true或false的字符串和數字:?
false值舉例:?
false,“false”,“off”,“no”,“0”,“”(空字符串),0,0.0?
true值舉例:?
以上false示例的反面,一切非假值。

2.5 二進制類型選型

二進制類型接受二進制值作為Base64編碼字符串。 該字段默認情況下不存儲,不可搜索:?
如: “blob”: “U29tZSBiaW5hcnkgYmxvYg==”

2.6 范圍類型選型

integer_range :整型范圍類型;?
float_range :單精度浮點范圍類型;?
long_range :長整型范圍類型;?
double_range :雙精度范圍類型;?
date_range :時間范圍類型;?
ip_range :IP范圍類型。?
以上,根據類型&范圍需要選型即可。

2.7 數組類型選型

2.7.1 Array數組類型選型

在Elasticsearch中,沒有專門的數組類型。?
默認情況下,任何字段都可以包含零個或多個值,但是數組中的所有值必須是相同的數據類型。 例如:?
字符串數組: [ “one”, “two”?
整數數組:[1,2]?
陣列數組:[1,[2,3]],相當于[1,2,3]?
一系列對象數組:[{“name”:“Mary”,“age”:12},{“name”:“John”,“age”:10}]?
可以理解為單類型擴展多個值的類型。?
如果需要根據數組值進行查詢操作,官網建議使用nested嵌套類型。

數組類型:沒有明顯的字段類型設置,任何一個字段的值,都可以被添加0個到多個,當類型一直含有多個值存儲到ES中會自動轉化成數組類型?
對于數組類型的數據,是一個數組元素做一個數據單元,如果是分詞的話也只是會依一個數組元素作為詞源進行分詞,不會是所有的數組元素整合到一起。?
在查詢的時候如果數組里面的元素有一個能夠命中那么將視為命中,被召回。

2.7.2 Object對象類型

JSON文檔本質上是分層的: 存儲類似json具有層級的數據,文檔可能包含內部對象,而內部對象又可能包含其他內部對象。

PUT my_index/my_type/1 {"region": "US","manager": {"age": 30,"name": {"first": "John","last": "Smith"}} }

這和Json類型的初衷是一致的。?
訪問方式舉例: “manager.name.last”: “Smith”。

2.7.3 nested嵌套類型

nested 嵌套類型是Object數據類型的特定版本,允許對象數組彼此獨立地進行索引和查詢。?
一個例子,自然就明白了:

PUT my_index {"mappings": {"my_type": {"properties": {"user": {"type": "nested"}}}} }PUT my_index/my_type/1 {"group" : "fans","user" : [{"first" : "John","last" : "Smith"},{"first" : "Alice","last" : "White"}] }GET my_index/_search {"query": {"nested": {"path": "user","query": {"bool": {"must": [{ "match": { "user.first": "Alice" }},{ "match": { "user.last": "Smith" }}]}}}} }

能完成嵌套查詢&檢索,對于非一對一關系的字段適用。?
在ElasticSearch內部,嵌套的文檔(Nested Documents)被索引為很多獨立的隱藏文檔(separate documents),這些隱藏文檔只能通過嵌套查詢(Nested Query)訪問。每一個嵌套的文檔都是嵌套字段(文檔數組)的一個元素。?
嵌套文檔的內部字段之間的關聯被ElasticSearch引擎保留,而嵌套文檔之間是相互獨立的。?
默認情況下,每個索引最多創建50個嵌套文檔,可以通過索引設置選項:index.mapping.nested_fields.limit 修改默認的限制。

2.8 IP類型

存儲IPV4或IPV6地址。?
如: “ip_addr”: “192.168.1.1”

2.9 completion suggester類型

suggester類型對應 suggester檢索,完成自動補全。

2.10 令牌計數類型

類型為token_count的字段實際上是一個接受字符串值的整數字段,對它們進行分析,然后對字符串中的令牌數進行索引。

……..

3、Elasticsearch萬能Mapping模板。

以下模板,已驗證好用。

PUT testinfo_index{"mappings": {"testinfo_type": {"properties": {"id": {"type": "long"},"title": {"type": "keyword"},"content": {"analyzer": "ik_max_word","type": "text","fields": {"keyword": {"ignore_above": 256,"type": "keyword"},"available": {"type": "boolean"},"review": {"type": "nested","properties": {"nickname": {"type": "text"},"text": {"type": "text"},"stars": {"type": "integer"}}},"publish_time": {"type": "date","format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"},"expected_attendees": {"type": "integer_range"},"ip_addr": {"type": "ip"},"suggest": {"type": "completion"}}}}}} }

總結

以上是生活随笔為你收集整理的Elasticsearch5.X Mapping万能模板的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。