Golang并从Mongo对象为Elasticsearch创建嵌套索引

时间:2015-04-20 23:38:33

标签: go mgo elasticsearch

我正在学习Golang。我试图将嵌套对象从Mongo索引到嵌套索引Elasticsearch。

对于Mongo对象,我创建了两个结构:

type Parent struct {
    Client_Mac   string
    Visit        NestedVisit `json:"visits" elastic:"type:nested"`
}

type NestedVisit struct {
    Last_Seen time.Time `json:"last_seen" elastic:"type:date"`
}

我只需要遍历数组并为每个数组编制索引,包括嵌套索引。

对于(我自己的)速度,我在Golang之外创建了一个嵌套映射:

{
    "test": {
        "mappings": {
            "test": {
                "properties": {
                    "client_mac": {
                        "type": "string"
                    },
                    "visits": {
                        "type": "nested",
                        "properties": {
                            "last_seen": {
                                "type": "date",
                                "format": "dateOptionalTime"
                            },
                        }
                    }
                }
            }
        }
    }
}

我通过循环遍历Mongo对象开始索引对象。在我的主要功能中,我有这个:

func main() {

    db := session.DB("test")
    data := GetData(db)

    for _, each := range data {
        ReIndex(each)
    }

 }

ReIndex函数如下所示:

func ReIndex(s Parent) {

    var m map[string]int
    m = make(map[string]int)

    for _, each := range s.Visits {
            m["last_seen"] = each.Last_Seen
    }

    fmt.Printf("Test: %v\n", m)

    visit1 := Parent{Client_Mac: s.Client_Mac, Visit: NestedVisit{Last_Seen: 1000}}
    put1, err := el.Index().
           Index("test").
           Type("test").
           Id(s.Id.Hex()).
           BodyJson(visit1).
           Do()
    if err != nil {
           panic(err)
    }

    fmt.Printf("Indexed test %s to index %s, type %s\n", put1.Id, put1.Index, put1.Type)
}

哪个好,但是我需要访问次数才能访问。

因此,在循环中,我尝试循环访问数组并创建了一个地图:

var m map[string]int
m = make(map[string]int)

for _, each := range s.Visits {
        m["last_seen"] = each.Last_Seen
}

然后我尝试更改父结构:

type Parent struct {
   ... 
   Visit        interface{} `json:"visits" elastic:"type:nested"`
}

visit1 := Parent{Client_Mac: s.Client_Mac, Visit: m}

但索引看起来像这样:

"visits":{"last_seen":1000}

有人可以解释Visits应该有哪些类型来促进数组吗?

聚苯乙烯。我正在使用mgo和elastic search client

0 个答案:

没有答案
相关问题