一:數據類型
核心數據類型
復雜數據類型
專用數據類型
二:核心數據類型
1.字符串
text:⽤於全⽂索引,該類型的字段將通過分詞器進⾏分詞
keyword:不分詞,只能搜索該字段的完整的值
2.數值型
long, integer, short, byte, double, float, half_float, scaled_float
3.二進制
該類型的字段把值當做經過 base64 編碼的字符串,默認不存儲,且不可搜索
4.范圍類型
范圍類型表示值是⼀個范圍,⽽不是⼀個具體的值 integer_range, float_range, long_range, double_range, date_range
譬如 age 的類型是 integer_range,那么值可以是 {"gte" : 20, "lte" : 40};搜索 "term" : {"age": 21} 可以搜索該值
制造數據,然后添加:
PUT /wba/ { "mappings": { "properties": { "age_range": { "type": "integer_range" } } } } PUT /wba/_doc/1 { "age_range":{ "gte":10, "lte":15 } } PUT /wba/_doc/2 { "age_range":{ "gte":15, "lte":20 } } PUT /wba/_doc/3 { "age_range":{ "gte":20, "lte":30 } }
查詢:
GET /wba/_search { "query": { "term":{ "age_range":15 } } }
效果:
{ "took" : 247, "timed_out" : false, "_shards" : { "total" : 1, "successful" : 1, "skipped" : 0, "failed" : 0 }, "hits" : { "total" : { "value" : 2, "relation" : "eq" }, "max_score" : 1.0, "hits" : [ { "_index" : "wba", "_type" : "_doc", "_id" : "1", "_score" : 1.0, "_source" : { "age_range" : { "gte" : 10, "lte" : 15 } } }, { "_index" : "wba", "_type" : "_doc", "_id" : "2", "_score" : 1.0, "_source" : { "age_range" : { "gte" : 15, "lte" : 20 } } } ] } }
5.日期類型
由於Json沒有date類型,所以es通過識別字符串是否符合format定義的格式來判斷是否 為date類型
format默認為:strict_date_optional_time||epoch_millis
格式 "2022-01-01" "2022/01/01 12:10:30", 這種字符串格式
從開始紀元(1970年1⽉1⽇0點) 開始的毫秒數
從開始紀元開始的秒數
PUT /cba/ { "mappings": { "properties": { "name": { "type": "text" }, "team_name": { "type": "text" }, "position": { "type": "text" }, "play_year": { "type": "long" }, "jerse_no": { "type": "keyword" }, "title": { "type": "text" }, "date": { "type": "date" } } } }
添加數據
PUT /cba/_doc/1 { "name": "蔡x坤", "team_name": "勇⼠", "position": "得分后衛", "play_year": 10, "jerse_no": "31", "title": "打球最帥的明星", "date": "2020-01-01" } PUT /cba/_doc/2 { "name": "楊超越", "team_name": "猴急", "position": "得分后衛", "play_year": 10, "jerse_no": "32", "title": "打球最可愛的明星", "date": 1610350870 }
直接查詢:
GET /cba/_search { "query": { "term": { "date": { "value": "2020-01-01" } } } }
結果:
{ "took" : 541, "timed_out" : false, "_shards" : { "total" : 1, "successful" : 1, "skipped" : 0, "failed" : 0 }, "hits" : { "total" : { "value" : 1, "relation" : "eq" }, "max_score" : 1.0, "hits" : [ { "_index" : "cba", "_type" : "_doc", "_id" : "1", "_score" : 1.0, "_source" : { "name" : "蔡x坤", "team_name" : "勇⼠", "position" : "得分后衛", "play_year" : 10, "jerse_no" : "31", "title" : "打球最帥的明星", "date" : "2020-01-01" } } ] } }
三:復雜數據類型
1.數組類型Array
ES中沒有專⻔的數組類型, 直接使⽤[]定義即可,
數組中所有的值必須是同⼀種數據類 型, 不⽀持混合數據類型的數組:
字符串數組 [ "one", "two" ] 整數數組 [ 1, 2 ] Object對象數組 [ { "name": "Louis", "age": 18 }, { "name": "Daniel", "age": 17 }]
同⼀個數組只能存同類型的數據,不能混存,譬如 [ 10, "some string" ] 是錯誤的
2.對象類型Object
對象類型可能有內部對象
{ "name": "吳亦凡", "team_name": "湖⼈", "position": "得分后衛", "play_year": 10, "jerse_no": "33", "title": "最會說唱的明星", "date": "1641886870", "array": [ "one", "two" ], "address": { "region": "China", "location": { "province": "GuangDong", "city": "GuangZhou" } } }
索引方式:
{ "query": { "match": { "address.region": "china" } } }
四:專用的數據類型