2013-01-16 86 views
1

我一直在採取嬰兒的步驟使用Elasticsearch,並在研究一個單獨的問題時遇到了this question.在這裏,swatkins詢問了有關查詢嵌套對象的問題,並且響應者指出嵌套對象並不是必需的。我在這裏複製的模型,並進行了一些修改,以反映我的特殊問題:我應該使用嵌套對象還是普通字段?

[{ 
    id:4635, 
    description:"This is a test description", 
    author:"John", 
    author_id:51421, 
    meta: { 
     title:"This is a test title for a video", 
     description:"This is my video description", 
     url:"/url_of_video" 
     awesomeness-level: "pretty-awesome" 
     kung-fu: true 
    } 
}, 
{ 
    id:4636, 
    description:"This is a test description 2", 
    author:"John", 
    author_id:51421, 
    meta: { 
     title:"This is an example title for a video", 
     description:"This is my video description2", 
     url:"/url_of_video2" 
     kung-fu:false 
     monsters:true 
     monsters-present: "Dracula, The Mummy" 
    } 
}] 

我們的應用程序允許用戶定義自定義元數據,所以我們使用嵌套對象來表示這些數據。乍一看,它看起來與swatkins的模型相似,所以我認爲也許我們不應該使用嵌套對象。

最大的區別是每個對象的元可能是不同的,請注意第二個視頻有專門關於「怪獸電影」的元,而第一個視頻引用「真棒級」。那麼,我應該使用嵌套對象,還是僅將元數據映射爲普通字段?如果我們做後者,第一個視頻會有空的元數據字段嗎?這真的很重要嗎?提前致謝!

回答

1

假設您的示例代表兩個elasticsearch文檔,看起來您不需要使meta爲嵌套對象。當一個父對象具有多個嵌套對象並且您的搜索涉及多個嵌套對象字段時,使用嵌套對象是有意義的。舉例來說,如果你有這樣的記載:

{ 
    "name": "apple", 
    "attributes": [ 
    { 
     "color": "yellow", 
     "size": "big" 
    }, 
    { 
     "color": "red", 
     "size": "small" 
    } 
    ] 
} 

,你想,當你搜索color:yellow AND shape:bigcolor:red AND shape:small但不希望它被返回,當您搜索color:yellow AND shape:small被發現這個紀錄,這讓意義使attributes嵌套對象。它將允許您獨立索引和搜索每個屬性,然後獲取匹配屬性的父對象。

相關問題