PUT movies
{
"mappings" : {
// define your mappings here
}
}
- 可以參考API手冊,純手寫
- 為了減少輸入的工作量,減少出錯率,依照以下步驟
- 建立一個臨時的index,寫入一些樣本資料
- 通過訪問 Mapping API獲得該臨時檔案的動態 Mapping 定義
- 修改後用,使用該配置建立的索引
- 刪除臨時索引
- index - 控制當前欄位是否被索引。預設為true。如果設定成false,該欄位不可被搜尋。
PUT users { "mappings" : { "properties" : { "firstName" : { "type" : "text" }, "lastName" : { "type" : "text" }, "mobile" : { "type" : "text", "index": false } } } }
- 四種不同級別的 Index Options 配置,可以控制倒排索引記錄的內容
- docs - 記錄 doc id
- freqs - 記錄 doc id 和 term frequencies
- positions - 記錄 doc id / term frequencies / term position
- offsets - doc id / term frequencies / term posistion / character offects
- Text 型別預設記錄 postions,其他預設為docs
- 記錄內容越多,佔用儲存空間越大
- 需要對NULL 值實現搜尋
- 只有 Keyword 型別支援設定 Null_Value
DELETE users PUT users { "mappings" : { "properties" : { "firstName" : { "type" : "text" }, "lastName" : { "type" : "text" }, "mobile" : { "type" : "keyword", //這個如果是text 無法設定為空 "null_value": "NULL" } } } } PUT users/_doc/2 { "firstName":"Li", "lastName": "Sunke", "mobile": null } GET users/_search?q=mobile:NULL //搜尋結果 "_source" : { "firstName" : "Li", "lastName" : "Sunke", "mobile" : null }
- _all 在 7中已經被 copy_to 所替代
- 滿足一些特定的搜尋需求
- copy_to 將欄位的數值拷貝到目標欄位,實現類似 _all 的作用
- copy_to 的目標欄位不出現在_source 中
DELETE users PUT users { "mappings": { "properties": { "firstName":{ "type": "text", "copy_to": "fullName" }, "lastName":{ "type": "text", "copy_to": "fullName" } } } } PUT users/_doc/1 { "firstName":"Li", "lastName": "Sunke" } //沒有新建欄位 GET users/_doc/1 { "_index" : "users", "_type" : "_doc", "_id" : "1", "_version" : 1, "_seq_no" : 0, "_primary_term" : 1, "found" : true, "_source" : { "firstName" : "Li", "lastName" : "Sunke" } } GET users/_search?q=fullName:(Li sunke)
- Elasticsearch 中不提供專門的陣列型別。但是任何欄位,都可以包含多個相同型別的數值
DELETE users PUT users/_doc/1 { "name":"onebird", "interests":"reading" } PUT users/_doc/1 { "name":"twobirds", "interests":["reading","music"] } GET users/_mapping //部分程式碼 "interests" : { "type" : "text", //型別還是text "fields" : { "keyword" : { "type" : "keyword", "ignore_above" : 256 } } }
PS: text
型別會使用預設分詞器分詞,當然你也可以為他指定特定的分詞器。如果定義成keyword
型別,那麼預設就不會對其進行分詞。
es對字串型別的mapping
設定,會將其定義成text
,同時為他定義一個叫做keyword
的子欄位。keyword
只是他的名字,你也可以定義成kw
。這個欄位的型別是keyword
(這是一個型別的關鍵字)
多欄位型別情況下,你可以查詢 title
,也可以查詢title.keyword
查詢型別為keyword
的子欄位
本作品採用《CC 協議》,轉載必須註明作者和本文連結