2013-01-06 261 views
1

我不知所措至於如何具有以下結構映射文件用於搜索:ElasticSearch映射嵌套枚舉對象(I18N)

{ 
    "_id": "007ff234cb2248", 
    "ids": { 
    "source1": "123", 
    "source2": "456", 
    "source3": "789" 
    } 
    "names": [ 
    {"en":"Example"}, 
    {"fr":"exemple"}, 
    {"es":"ejemplo"}, 
    {"de":"Beispiel"} 
    ], 
    "children" : [ 
    { 
     "ids": { 
     "source1": "CXXIII", 
     "source2": "CDLVI", 
     "source3": "DCCLXXXIX", 
     } 
     names: [ 
     {"en":"Example Child"}, 
     {"fr":"exemple enfant"}, 
     {"es":"Ejemplo niño"}, 
     {"de":"Beispiel Kindes"} 
     ] 
    } 
    ], 
    "relatives": { 
    // Typically no "ids" at this level. 
    "relation": 'uncle', 
    "children": [ 
     { 
     "ids": { 
      "source1": "0x7B", 
      "source2": "0x1C8", 
      "source3": "0x315" 
     }, 
     "names": [ 
      {"en":"Example Cousin"}, 
      {"fr":"exemple cousine"}, 
      {"es":"Ejemplo primo"}, 
      {"de":"Beispiel Cousin"} 
     ] 
     } 
    ] 
    } 
} 

child對象可以直接出現在children部,或者進一步嵌套在我的文檔中作爲uncle.children(表兄弟,在這種情況下)。 ID字段對於一級(根),二級(孩子和叔叔)以及三級(堂兄弟)是共同的,命名結構對於一級和三級也是常見的。

我的用例是能夠通過前綴和整個ID搜索ID(嵌套對象)。並且還能夠搜索子分類名稱,在(尚未定義的)分析器規則集之後。

我一直無法找到一種方法來以任何有用的方式映射這些。我不相信在idsnames中使用相同的技術會取得很大的成功,因爲名稱和文檔根目錄之間存在額外的映射級別。

我甚至不確定它是否可以映射。我相信至少原則上ids應該可以作爲術語來映射,也許如果我以某種方式將術語索引爲names

我簡直茫然不知所措,文檔似乎沒有涵蓋像這個複雜映射級別的任何東西。

我對文件的控制有限(讀取:no),因爲它來自CouchDB河,而上游應用程序已經依賴於這種格式,所以我不能真的改變它。

我正在尋找能夠處理由以下僞條件,所有這些都應該匹配搜索:

  • ID:"123"
  • ID由源(我不知道如何最好的紀念這個僞語言上)
  • ID前綴:"CDL"
  • 名稱:"Example""Example Child"
  • 本地化的名稱(我甚至不知道如何最好爲p seudo-mark this up!

tokenising和分析的細節我可以找出我自己,當我至少知道如何

  • 對象映射當兩個鍵和對象屬性的值是重要的
  • 當鍵和值很重要時,可枚舉對象。

回答

1

如果從ID到其子的映射是1對多的,那麼你可以在孩子的名字存儲在孩子領域,作爲一個領域可以有多個值。每個文檔然後將具有ID字段,可能是關係字段,以及零個或更多字段。

+0

我想我要將文檔預處理爲一組更簡單的文檔,並且表示我想要搜索的數據更好,而不是在elasticsearch上投擲大塊數據,並期望它在未經修改的情況下粘貼。 –