elasticsearch5.0.0版本映射的變化

在elasticsearch5.0.0中映射也有很多的變化。數據結構

一、string類型被替換成了text/keyword兩種類型。 app

對於分詞字段的字符串字段用text來替換,對於不分詞的字符串字段用keyword來替換,爲了兼容5.0中還保留了string類型,將在6.0版本中去掉。elasticsearch

字符串映射如今有以下的默認映射:orm

{
  "type": "text",
  "fields": {
    "keyword": {
      "type": "keyword",
      "ignore_above": 256
    }
  }
}

字符串被映射成了兩個字段,一個字段進行分詞,另外一個子字段不進行分析,能夠用於聚合或者排序。對象

二、數字類型排序

數字類型如今是一種全新的數據結構,被成爲BKD tree。相比之前的方式有更快的對比查詢效率和佔用更少的磁盤空間。注意,數字類型將不參與索引的評分,若是須要對數字字段進行參與評分,能夠同時映射爲數字類型和keyword類型。例如:索引

PUT my_index
{
  "mappings": {
    "my_type": {
      "properties": {
        "my_number": {
          "type": "long",
          "fields": {
            "keyword": {
              "type":  "keyword"
            }
          }
        }
      }
    }
  }
}

三、geo_point字段接口

和數字類型類型,Geo point字段類型也用了BKD tree結構。.因爲這種結構從根本上進行多維空間數據的支持,下列字段參數將不在支持:Geohash,geohash_prefix,geohash_precision,lat_lon。Geohashes在接口中仍然可使用,但他們再也不是用來索引地理數據點。ip

四、_timestamp 和 _ttl 字段ci

元字段_timestamp 和 _ttl字段將再也不被支持,對於_timestamp能夠在文檔中添加日期字段來代替或者用ingest pipline,例如:

PUT _ingest/pipeline/timestamp
{
  "description" : "Adds a timestamp field at the current time",
  "processors" : [ {
    "set" : {
      "field": "timestamp",
      "value": "{{_ingest.timestamp}}"
    }
  } ]
}

PUT newindex/type/1?pipeline=timestamp
{
  "example": "data"
}

GET newindex/type/1

對於_ttl能夠用time-based索引或者在一個時間戳字段範圍查詢(_delete-by-query)的任務來替換。

POST index/type/_delete_by_query
{
  "query": {
    "range" : {
      "timestamp" : {
        "lt" : "2016-05-01"
      }
    }
  }
}

五、索引屬性

全部再用的字段類型,除了將要廢棄的string,索引屬性只有 true/false用來代替not_analyzed/no,string字段類型仍是analyzed/not_analyzed/no.

六、非索引字段的文檔值

在此以前,設置一個字段的屬性爲index:no將禁用文檔的值,如今,doc-values的值對數字和boolean類型的值老是有效,除非doc_values的值設置爲false。

七、默認浮點類型的之用float來代替double 

在動態映射浮點類型的字段時,默認映射成float類型,而不是double類型,由於大多數狀況下float類型已經夠用了,而float類型將顯著的減小磁盤空間的佔用。

norms如今用boolean來代替對象,norms.enabled被替換成了boolean,norms.loading 參數eager 將不在起做用,如今norms是基於磁盤的.

設置fielddata.format: doc_values在用於隱式啓用字段的文檔映射中。如今隱式方式將不在起做用,須要明確的設置doc_values的值爲有效或者無效。

fielddata.filter.regex參數將不在支持,將來版本會取消。

八、字段映射限制

在5.0中對索引中的字段進行了限制,最大1000個字段。

字段的最大深度(嵌套字段)是20。

索引中嵌套字段的最大數量是有限的50。

 

_parent字段將再也不索引,鏈接父母與孩子之間的文件再也不依賴索引字段,所以從5.0.0起_parent字段再也不索引。爲了找到文檔引用一個特定的父id,可使用新的parent_id來進行查詢。搜索返回中的獲得響應和hits仍然包括父鍵下的父標識。

_source映射再也不支持格式選項,如今只是爲了兼容性保留,爲了會被去掉。

核心類型再也不支持對象符號(bject notation),它被用來提供每一個文檔的boosts ,例如:

{
  "value": "field_value",
  "boost": 42
}

_all查詢的精度

在_all上的每一個字段的長度由之前的4個字節壓縮到了一個字節,雖然這將使索引的空間效率更高,這也意味着索引時間的計算將不太準確。

本文由賽克 藍德(secisland)原創,轉載請標明做者和出處。

相關文章
相關標籤/搜索