1. 程式人生 > 實用技巧 >Elasticsearch 對映型別之陣列型別(arrays)

Elasticsearch 對映型別之陣列型別(arrays)

在Elasticsearch中,沒有專用的array資料型別。預設情況下,任何欄位都可以包含零個或多個值,但是,陣列中的所有值都必須具有相同的資料型別

這一點是區別於nested的,nested指的物件的集合。而arrays則是單一型別的陣列集合而已。

此外,不需要專門的型別類定義陣列型別。

例如:

  • 字串陣列["one", "two"]
  • 整數陣列[ 1,2]
  • 陣列的陣列:[ 1[ 2,3]],這是相當於[ 1,2,3]

動態新增欄位時,陣列中的第一個值確定field type。所有後續值必須具有相同的資料型別,或者至少必須能夠將後續值強制轉換為相同的資料型別。像[1, 3, "some word"]

不支援混合使用。

陣列型別對映建立示例如下。

PUT example
PUT example/docs/_mapping
{
    "properties": {
        "id":{"type": "long"},
        "name": {"type": "text"},
        "age":{"type":"integer"},
        "hobby": {"type": "text"}
    }
}

注意:陣列欄位的定義,不是array哦。

陣列型別的物件新增示例如下。

PUT example/docs/1 
{
    "id": 111,
    
"name":"張三", "age":22, "hobby":["籃球","摔跤"] } PUT example/docs/2 { "id": 222, "name":"張三2", "age":21, "hobby":["籃球222","摔跤222"] }

陣列型別的搜尋示例如下。

#搜尋愛好有籃球的
GET example/docs/_search
{
    "query": {
        "match": {
            "hobby": "籃球"
        }
    }
}
# 最後搜出來2個結果


GET example
/docs/_search { "query": { "match": { "hobby": "22" } } } # 最後搜出來1個結果