我正在学习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。