Elasticsearch對映使用講解

2021-12-29 20:06:05 字數 1844 閱讀 8312

索引中每個文件都有乙個型別(type)。每個型別擁有自己的對映(mapping)或者模式定義(schema definition)。乙個對映定義了字段型別,每個欄位的資料型別,以及欄位被elasticsearch處理的方式。對映還用於設定關聯到型別上的元資料。

核心簡單字段型別

elasticsearch支援以下簡單字段型別:

當你索引乙個包含新字段的文件--乙個之前沒有的字段--elasticsearch將使用動態對映猜測字段型別,這型別來自於json的基本資料型別,使用以下規則:

這意味著,如果你索引乙個帶引號的數字--「123」,它將被對映為「string」型別,而不是「long」型別。然而,如果字段已經被對映為「long」型別,elasticsearch將嘗試轉換字串為long,並在轉換失敗時丟擲異常。

我們可以使用_mapping字尾來檢視elasticsearch中的對映。

curl -xget ""

小提示錯誤的對映,例如age欄位對映為string型別而不是integer型別,會造成查詢結果混亂。

要檢查對映型別,而不是假設它是正確的!

index引數控制字串以何種方式被索引。它包含以下三個值當中的乙個:

string型別字段預設是analyzed。如果我們想對映欄位為確切值,我們需要設定它為not_analyzed:

"tag" :

對於陣列不需要特殊的對映。任何乙個字段可以包含零個、乙個或多個值,同樣對於全文本段將被分析並產生多個詞。

這就意味著陣列中所有的值必須為同一型別。你不能把日期和字串混合。如果你建立乙個新字段,這個字段索引了乙個陣列,elasticsearch將使用第乙個值的型別來確定這個新字段的型別。

當你從elasticsearch中取回乙個文件,任何乙個陣列的順序和你索引它們的順序一致。你取回的_source欄位的順序同樣與索引它們的順序相同。

然而,陣列是做為多值字段被索引的,它們沒有順序。在搜尋階段你不能指定「第乙個值」或者「最後乙個值」。倒不如把陣列當作乙個值集合(gag of values)

當然陣列可以是空的。這等價於有零個值。事實上,lucene沒法存放null,所以乙個null值的字段被認為是空欄位。

這四個欄位將被識別為空字段而不被索引:

"empty_srting" : "",

"null_value" : null,

"empty_array" : ,

"array_with_null_value" : [null]

最後乙個自然json資料型別是物件(object)----在其它語言中叫做hashed、hashmaps、dictionaries或者associative arrays

內部物件(inner object)經常用於嵌入乙個實體或物件裡的另乙個地方。例如,做在tweet文件中user_name和user_id的替代,我們可以這樣寫:

"tweet" : "elastcsearch is very good",

"user" : {

"id" : "@johnsmith",

"gender" : "male",

"age" : 26,

"name" : {

"full" : "john smith",

"first" : "john",

"last" : "smith"

elasticsearch 動態對映

來確定欄位的資料型別並自動把新的字段新增到型別對映。有時這是想要的行為有時又不希望這樣。通常沒有人知道以後會有什麼新字段加到文件,但是又希望這些欄位被自動的索引。也許你只想忽略它們。如果elasticsearch是作為重要的資料儲存,可能就會期望遇到新字段就會丟擲異常,這樣能及時發現問題。幸運的是可...

ElasticSearch 型別對映

當檢視索引裡的資料,我們意識到一些奇怪的東西。有些事情看起來有問題,我們在索引裡有12個tweets,只有1個包含date 2014 09 15 現在讓我們看看這些查詢。get search?q 2014 12 results get search?q 2014 09 15 12 results g...

ElasticSearch 對映配置

索引有了,接下來肯定是新增資料。但是,在新增資料之前必須定義對映。什麼是對映?對映是定義文件的過程,文件包含哪些字段,這些字段是否儲存,是否索引,是否分詞等 只有配置清楚,elasticsearch才會幫我們進行索引庫的建立 不一定 語法 請求方式依然是put 示例 發起請求 images pric...