1

我不知道如何使用以下结构映射文档以进行搜索:

{
  "_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(在这种情况下是表兄弟)。IDs 字段为第一层(根)、第二层(孩子和叔叔)和第三层(堂兄弟)所共有,命名结构也为第一层和第三层所共有。

我的用例是能够按前缀和整个 ID 搜索 ID(嵌套对象)。并且还能够按照一组(尚未定义的)分析器规则搜索子名称。

我还没有找到以任何有用的方式映射这些的方法。我不相信对idsand使用相同的技术会取得很大的成功names,因为在名称和文档根之间存在额外级别的映射。

我什至不确定它是否可以映射。我至少在原则上相信ids应该可以映射为术语,也许如果我names以某种方式索引 as 术语,也是。

我简直不知所措,文档似乎没有涵盖这种级别的复杂映射。

我对来自 CouchDB 河的文档的控制有限(阅读:否),并且上游应用程序已经依赖于这种格式,所以我无法真正更改它。

我正在寻找能够通过以下伪条件进行搜索,所有这些都应该匹配:

  • ID:"123"
  • 来源 ID(我不知道如何最好地用伪语言标记)
  • 身份证前缀:"CDL"
  • 姓名:"Example","Example Child"
  • 本地化名称(我什至不知道如何最好地对其进行伪标记!

当我至少知道如何映射时,我可以自己弄清楚标记化和分析的细节

  • 对象属性的键和值都很重要时的对象
  • 当键和值很重要时的可枚举对象。
4

1 回答 1

1

如果从 ID 到其子项的映射是一对多,那么您可以将子项的名称存储在字段中,因为一个字段可以有多个值。然后每个文档将有一个ID字段,可能是一个关系字段,以及零个或多个子字段。

于 2013-01-07T12:00:45.300 回答