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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

(五)ElasticSearch 6.1.1数据类型

發布時間:2023/12/10 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 (五)ElasticSearch 6.1.1数据类型 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1、elasticsearch的數據類型

1.1、核心數據類型

1.1.1、字符串類型(string不再支持)

當一個字段需要用于全文搜索(會被分詞), 比如產品名稱、產品描述信息, 就應該使用text類型.
text的內容會被分詞, 可以設置是否需要存儲: “index”: “true|false”.
text類型的字段不能用于排序, 也很少用于聚合.

PUT website {"mappings": {"blog": {"properties": {"summary": {"type": "text", "index": "true"}}}} }

當一個字段需要按照精確值進行過濾、排序、聚合等操作時, 就應該使用keyword類型.
keyword的內容不會被分詞, 可以設置是否需要存儲: “index”: “true|false”.

PUT website {"mappings": {"blog": {"properties": {"tags": {"type": "keyword", "index": "true"}}}} }

1.1.2 數字類型

類型說明
byte有符號的8位整數, 范圍: [-128 ~ 127]
short有符號的16位整數, 范圍: [-32768 ~ 32767]nteger
integer有符號的32位整數, 范圍: [?231 ~ 231-1]
long有符號的64位整數, 范圍: [?263 ~ 263-1]
float32位單精度浮點數
double64位雙精度浮點數
half_float16位半精度IEEE 754浮點類型
scaled_float縮放類型的的浮點數, 比如price字段只需精確到分, 57.34縮放因子為100, 存儲結果為5734
PUT shop {"mappings": {"book": {"properties": {"name": {"type": "text"},"quantity": {"type": "integer"}, // integer類型"price": {"type": "scaled_float", // scaled_float類型"scaling_factor": 100}}}} }

1.1.3 日期類型 - date

JSON沒有日期數據類型, 所以在ES中, 日期可以是:

包含格式化日期的字符串, “2018-10-01”, 或"2018/10/01 12:10:30".
代表時間毫秒數的長整型數字.
代表時間秒數的整數.

// 添加映射 PUT website {"mappings": {"blog": {"properties": {"pub_date": {"type": "date"} // 日期類型}}} }// 添加數據 PUT website/blog/11 { "pub_date": "2018-10-10" }PUT website/blog/12 { "pub_date": "2018-10-10T12:00:00Z" } // Solr中默認使用的日期格式PUT website/blog/13 { "pub_date": "1589584930103" }

1.2、復雜數據類型

1.2.1 數組類型 - array

ES中沒有專門的數組類型, 直接使用[]定義即可;

數組中所有的值必須是同一種數據類型, 不支持混合數據類型的數組:
① 字符串數組: [“one”, “two”];
② 整數數組: [1, 2];
③ 由數組組成的數組: [1, [2, 3]], 等價于[1, 2, 3];
④ 對象數組: [{“name”: “Tom”, “age”: 20}, {“name”: “Jerry”, “age”: 18}].

  • 動態添加數據時, 數組中第一個值的類型決定整個數組的類型;
  • 不支持混合數組類型, 比如[1, “abc”];
  • 數組可以包含null值, 空數組[]會被當做missing field —— 沒有值的字段

1.2.2 對象類型 - object

JSON文檔是分層的: 文檔可以包含內部對象, 內部對象也可以包含內部對象.

# 添加示例 PUT employee/developer/1 {"name": "ma_shoufeng","address": {"region": "China","location": {"province": "GuangDong", "city": "GuangZhou"}} } # 存儲方式 {"name": "ma_shoufeng","address.region": "China","address.location.province": "GuangDong", "address.location.city": "GuangZhou" }# 文檔的映射結構 PUT employee {"mappings": {"developer": {"properties": {"name": { "type": "text", "index": "true" }, "address": {"properties": {"region": { "type": "keyword", "index": "true" },"location": {"properties": {"province": { "type": "keyword", "index": "true" },"city": { "type": "keyword", "index": "true" }}}}}}}} }

1.2.3 嵌套類型 - nested

嵌套類型是對象數據類型的一個特例, 可以讓array類型的對象被獨立索引和搜索.
對象數組是如何存儲的

# 添加數據: PUT game_of_thrones/role/1 {"group": "stark","performer": [{"first": "John", "last": "Snow"},{"first": "Sansa", "last": "Stark"}] } # 內部存儲結構: {"group": "stark","performer.first": [ "john", "sansa" ],"performer.last": [ "snow", "stark" ] } # 存儲分析: 可以看出, user.first和user.last會被平鋪為多值字段, 這樣一來, John和Snow之間的關聯性就丟失了. 在查詢時, 可能出現John Stark的結果.

用nested類型解決object類型的不足
如果需要對以最對象進行索引, 且保留數組中每個對象的獨立性, 就應該使用嵌套數據類型.
—— 嵌套對象實質是將每個對象分離出來, 作為隱藏文檔進行索引.

# 創建映射 PUT game_of_thrones {"mappings": {"role": {"properties": {"performer": {"type": "nested" }}}} }# 添加數據 PUT game_of_thrones/role/1 {"group" : "stark","performer" : [{"first": "John", "last": "Snow"},{"first": "Sansa", "last": "Stark"}] }# 檢索數據 GET game_of_thrones/_search {"query": {"nested": {"path": "performer","query": {"bool": {"must": [{ "match": { "performer.first": "John" }},{ "match": { "performer.last": "Snow" }} ]}}, "inner_hits": {"highlight": {"fields": {"performer.first": {}}}}}} }

參考資料

  • https://www.cnblogs.com/shoufeng/p/10692113.html es數據類型講的很詳細;
  • 總結

    以上是生活随笔為你收集整理的(五)ElasticSearch 6.1.1数据类型的全部內容,希望文章能夠幫你解決所遇到的問題。

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