常見的字段類型


一:數據類型

  核心數據類型

  復雜數據類型

  專用數據類型

 

二:核心數據類型

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"
		}
	}
}

  

四:專用的數據類型

  可以參考:https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-types.html#_complex_datatypes

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM