Golang和从Mongo对象创建用于Elasticsearch的嵌套索引
我在学咕噜。我正在尝试将Mongo中的嵌套对象索引到嵌套索引Elasticsearch中 对于Mongo对象,我创建了两个结构:Golang和从Mongo对象创建用于Elasticsearch的嵌套索引,go,mgo,elasticsearch,Go,Mgo,elasticsearch,我在学咕噜。我正在尝试将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" el
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}
有人能解释一下什么类型的访问应该有利于阵列
另外,我正在使用mgo和。您的问题中遗漏了重要的细节。什么是
s
?代表json映射的某种go类型的变量,对吗?什么类型的?编译器是否产生错误?如果是,它们是什么?你能构造一个最小的程序来演示这个问题吗?@Anonymous试图说得有点太简洁了。如果按上述方式运行,则不会出现错误,但嵌套访问索引也不是数组。我不知道如何正确地将映射添加到结构中,以便对其进行索引。我不相信您不会出错Parent
没有字段Visits
,而Last(u)
是一个time.time
而不是int
。为了解决您的问题,我怀疑您想将Visite NestedVisite
更改为Visits[]NestedVisite
。我只是想寻求帮助,仅此而已。很明显,我已经更改了一些名称并删除了一些行。