如何为弹性搜索设计映射,其中类型包含另一种类型

时间:2018-05-22 05:56:29

标签: elasticsearch mapping

我想设计一个弹性搜索的映射,它包含一个类型A和一个类型B.而类型B有一个类型为A的字段。 这是官方文件中的一个例子

{
    "mappings":
    {

        "A":{
            "properties":
            {
                "A1":{"type":"keyword"},
                "A2":{"type":"keyword"},
                "A2":{"type":"keyword"}
            }
        },
        "B":{
            "properties":
            {
                "B1":{"type":"keyword"},
                "B2":{"type":"keyword"},
                "B2":{"type":"keyword"},
                "Field_A":{               //"Field_A":{"type":"A"} not legal
                    "properties":
                    {
                        "A1":{"type":"keyword"},
                        "A2":{"type":"keyword"},
                        "A2":{"type":"keyword"}
                    }
            }
        }
    }
}

有更优雅的方法吗?与c ++类一样,首先声明A和B,然后为B定义类型A的成员。

class A;

class B
{

private:
    A m_AtypeMember;

}

1 个答案:

答案 0 :(得分:0)

执行此操作的最佳方法是定义DynamicTemplate,您可以在其中指定匹配(* .A1)或与正则表达式更复杂的匹配,这样这种映射将应用于这两种类型。

{
  "mappings": {
    "doc": {
      "dynamic_templates": [
        {
          "mappingName": {
            "match_mapping_type": "string",
            "match_pattern": "regex",
            "match":"your regular expresion",
            "mapping": {
              "type": "keyword"
            }
          }
        }
      ]
    }
  }
}