一:數據類型
核心數據類型
復雜數據類型
專用數據類型
二:核心數據類型
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"
}
}
}
四:專用的數據類型
