嵌套可枚举对象的ElasticSearch映射(i18n)

时间:2013-01-06 21:23:07

标签: lucene indexing full-text-search elasticsearch

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

{
  "_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作为术语编入索引,也许。

我只是感到茫然,文档似乎没有涵盖任何类似复杂映射的内容。

我对文件的控制有限(读取:否),因为它来自CouchDB河,上游应用程序已经依赖于这种格式,所以我不能真正更改它。 / p>

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

  • ID:"123"
  • ID by source(我不知道如何以伪语言标记这一点)
  • ID前缀:"CDL"
  • 姓名:"Example""Example Child"
  • 本地化名称(我甚至不知道如何最好地对此进行伪标记!

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

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

1 个答案:

答案 0 :(得分:1)

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