es的mapping設置很關鍵,mapping設置不到位可能致使索引重建。如何更好的設置mapping?html
請看下面各個類型介紹^_^web
每個JSON字段能夠被映射到一個特定的核心類型。JSON自己已經爲咱們提供了一些輸入,支持string
, integer
/long
, float
/double
, boolean
, 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"}
}
}
}
基於文本的字符串類型是最基本的類型,包含一個或多個字符。能夠映射一個例子: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)。
許多類型的基礎支持浮動,雙,字節,短、整數和長。它使用特定的構造在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)
……