elasticsearch mapping

es的mapping設置很關鍵,mapping設置不到位可能致使索引重建。如何更好的設置mapping?html

請看下面各個類型介紹^_^web

core types

每個JSON字段能夠被映射到一個特定的核心類型。JSON自己已經爲咱們提供了一些輸入,支持stringinteger/longfloat/doubleboolean, and null.算法

下面的示例tweet的JSON文檔將被用來解釋核心類型:app

{
   
"tweet" {
       
"user" : "kimchy"
       
"message" : "This is a tweet!",
       
"postDate" : "2009-11-15T14:12:12",
       
"priority" : 4,
       
"rank" : 12.3
   
}
}

能夠顯式映射爲上面的JSON tweet:elasticsearch

{
   
"tweet" : {
       
"properties" : {
           
"user" : {"type" : "string", "index" : "not_analyzed"},
           
"message" : {"type" : "string", "null_value" : "na"},
           
"postDate" : {"type" : "date"},
           
"priority" : {"type" : "integer"},
           
"rank" : {"type" : "float"}
       
}
   
}
}

string

基於文本的字符串類型是最基本的類型,包含一個或多個字符。能夠映射一個例子:ide

{
   
"tweet" : {
       
"properties" : {
           
"message" : {
               
"type" : "string",
               
"store" : "yes",
               
"index" : "analyzed",
               
"null_value" : "na"
           
}
       
}
   
}
}

上面的映射定義一個字符串消息屬性/字段在tweet類型。字段存儲在索引(因此它稍後能夠被檢索使用選擇性加載搜索時),並獲得分析(分解成可搜索條件)。若是該消息有一個空值,那麼該值將被存儲是na.post

下表列出了全部的屬性,可使用字符串類型:ui

      Attribute                                                                 Descriptionspa

  index_name                                   字段的名稱,將存儲在索引中。默認屬性/字段名.   code

   store                                            設置爲yes來存儲實際的字段索引,沒有不存儲它。默認爲沒                                                            有(注意,JSON文檔自己是存儲,能夠從它檢索)。
   index                                            爲該領域設置爲分析索引和搜索在被分解成令牌使用分析                                                              儀。不分析意味着其仍可搜索,但沒有通過任何分析過程或分                                                          解爲令牌。不意味着它不會搜索(做爲一個單獨字段,它可能仍                                                        然被包括在全部)。設置沒有禁用包含在全部。默認爲分析。 
  term_vector                                  可能的值是不,是的,與補償,與職位,與位置偏移。默認爲沒                                                              有。
   boost                                            該boost的值,默認是1.0
   null_value                                   當有一個(JSON)null值的字段,可使用null值的字段值。默認                                                        爲不添加字段在全部。 
   omit_norms                                   布爾值若是規範應該省略或不是。默認值爲假的分析領域,適                                                          用於不分析領域。
   omit_term_freq_and_positions   布爾值若是術語和位置應該忽略頻率。默認值爲假。棄用自                                                          0.20,看到指數期權。
   index_options                             自從0.20可用。容許設置索引選項,可能的值是文檔(只有doc                                                          數字索引),freqs(doc數字和詞的頻率),和職位(doc數字,詞的頻                                                        率和位置)。默認位置分析領域,和文檔中沒有分析領域。由於                                                        0.90也能夠設置偏移量(doc數字,詞的頻率,位置和補償)。
   analyzer                                       這個分析儀用於分析文本內容分析時在索引和搜索時使用查                                                          詢字符串。默認爲全球配置分析儀。

  index_analyzer                            這個分析儀用於分析文本內容分析時在索引。                        

   search_analyzer                          這個分析儀用於分析場當一部分查詢字符串。能夠更新現有                                                          的字段。
   include_in_all                            應該被包括在這個領域的全部字段(若是啓用)。若是索引設置                                                        爲無默認值爲false,不然,默認爲true或父對象類型設置。
   ignore_above                                這個分析器將忽略字符串大於這個尺寸。用於通用不分析領                                                           域,應該忽略長文本。(由於@0.19.9)。
   position_offset_gap                   位置增量字段實例之間的差距與相同的字段名。默認值爲0。

字符串類型也支持自定義索引參數相關的索引值。例如:

{
   
"message" : {
       
"_value":  "boosted value",
       
"_boost":  2.0
   
}
}

須要消除歧義的映射文檔的含義。不然,該結構將解釋「消息」做爲「對象」類型的值。鍵值(或價值)在內部文檔指定字符串內容,最終真正應該被編入索引。促進(或提升)鍵指定每一個字段的文檔增長(這裏是2.0)。

number

許多類型的基礎支持浮動,雙,字節,短、整數和長。它使用特定的構造在Lucene爲了支持數字值。數字類型有相同的範圍做爲相應的Java類型。一個例子能夠映射:

{
   
"tweet" : {
       
"properties" : {
           
"rank" : {
               
"type" : "float",
               
"null_value" : 1.0
           
}
       
}
   
}
}

在這裏多舉幾個經常使用的例子:

例1:當某一個字段要分詞搜索, 則index就要設置相應的分詞器,store設置爲true

例2:當某一個字段要facet(分組統計),則必須設置這個字段爲no_analyzerd(不分詞);緣由是字段不設置分詞,默認是一元分詞。

例3:搜索關鍵字相應分數,對一些排名算法有必定的幫助,能夠爲一些重要字段設置分值(boost)

例4:時間格式問題,es支持format時間格式。(format:yyyy-MM-dd HH:mm:ss.SSS)

……

本文出自 http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/mapping-core-types.html#mapping-core-types

相關文章
相關標籤/搜索