2016-09-22 138 views
0

我想映射以下結構: - 我的博客文章 - 博客帖子可以有評論 - 評論可以有回覆(也評論),所以它應該是一個遞歸數據結構Elasticsearch嵌套親子映射

POST ----- * - >註釋

COMMENT ----- * --->註釋

這裏是我的嘗試:

mappings: { 
    "comment": { 
     "properties": { 
      "content": { "type": "string" }, 
      "replies": { "type": "comment" } 
     } 
    }, 
    "post": { 
     "properties": { 
      "comments": { 
        "type": "comment" 
      } 
     } 
    } 
} 

當然它不工作。我怎樣才能做到這一點?

回答

1

你想聲明的類型,你會在面向對象編程做,這不是它是如何工作的ES。您需要像下面那樣使用parent-child relationships,即post沒有稱爲comments的字段,但comment映射類型具有引用post父類型的元字段_parent

同樣以模特回覆我建議只是有另一場名爲in_reply_to這將包含答覆涉及評論的ID。這樣更容易!

PUT blogs 
{ 
    "mappings": { 
    "post": { 
     "properties": { 
     "title": { "type": "string"} 
     } 
    }, 
    "comment": { 
     "_parent": { 
     "type": "post" 
     }, 
     "properties": { 
     "id": { 
      "type": "long" 
     } 
     "content": { 
      "type": "string" 
     }, 
     "in_reply_to": { 
      "type": "long" 
     } 
     } 
    } 
    } 
} 
+0

似乎是合法的。回覆評論也可以被視爲對帖子的回覆。 'in_reply_to'字段將回復添加到評論中。謝謝! – maestro

+0

真棒,很高興它幫助! – Val

0
mappings: { 
    "post": { 
     "properties": { 
      "content": { "type": "string" }, 
      "comment": { 
       "properties" : { 
        "content": { "type": "string" }, 
        "replies": { 
         "properties" : { 
          "content": { "type": "string" } 
         } 
        } 
     } 
    } 
} 
+0

回覆也可以回覆 – maestro

+0

在這種情況下,添加註釋層次相同的一個多層次,或者如果有更多的層次(可以使用父映射方法https://www.elastic.co/guide/en/elasticsearch/reference/current /mapping-parent-field.html) –

+0

從鏈接文件:'「父進程和子類型必須是不同的 - 父子關係,不能同類型的文檔之間建立的。」' – maestro