【发布时间】:2015-10-27 01:37:41
【问题描述】:
我正在开发一个包含 MongoDB 和 Elasticsearch 的示例项目。经过长时间的研究,我选择了 Mongo-Connector 来实现 MongoDB 和 Elasticsearch 之间的同步。他们之间的同步已经很好了。
我在我的 MongoDB 上插入了很多文档。基本上文档引用了“人”。该文档具有以下基本 json 结构:
{
"Id": "5a308536-0bd9-47e6-8bdb-438dafd0488c",
"Name": "Seal",
"ExtraElements": {
"DateofBirth": "2001-12-27T03:41:30.333Z",
"Age": 56,
"Gender": "F"
}
}
上面的json映射到这个.net类
public class Person
{
public string Id { get; set; }
public string Name { get; set; }
public Dictionary<string, object> ExtraElements { get; set; }
}
正如您所见,“ExtraElements”是一个存储 N 个字段的字典。我们需要这个,因为我们不知道我们将拥有多少个字段。
当我在我的 MongoDB 中插入这样的 json 时,它会被映射到具有以下结构的文档中:
Person
Id
Name
DateofBirth
...
...
使用 Mongo-Connector 并正常工作,当我在 MongoDB 上插入第一个文档时,在 Elasticsearch 上插入了相同的文档。因为我没有类型,所以它是使用动态映射动态创建的。在 Elasticsearch 上创建的映射是这样的:
{
"repository" : {
"mappings" : {
"Person" : {
"properties" : {
"DateofBirth" : {
"type" : "date",
"format" : "dateOptionalTime"
},
"Age" : {
"type" : "long"
},
"Gender" : {
"type": "string"
}
"Name" : {
"type" : "string"
}
}
}
}
} }
如您所见,ExtraElements 字段被创建为“平面”文档,或者所有字段都处于同一“级别”,这意味着没有嵌套类型。
我现在的问题是:我正在使用 NEST 在 Elasticsearch 上进行查询,但是当我这样做时,我只得到 Id 和 Name 值,ExtraElements 字典为空。我在 Elasticsearch 上的映射内容做错了吗? c# 或 NEST 中有没有办法映射这个?
【问题讨论】:
-
您可以只使用普通的 C# 类而不是字典。您可以使用 GET /your_index/_mapping/your_type 来检查 elasticsearch 为您提供的实际映射。您可以稍后轻松添加字段。只需进行映射更新。但是,更改字段名称或类型会很困难。
标签: mongodb elasticsearch nest