NEST 2.0 不会将某些字段保留到 ElasticSearch 2.0 中
NEST 2.0 doesn't persist some fields into ElasticSearch 2.0
这是我的文档:
[ElasticsearchType(Name = "MyDoc")]
public class MyDoc: Dictionary<string, object>
{
[String(Store = false, Index = FieldIndexOption.NotAnalyzed)]
public string text { get; set; }
}
如您所见,它继承自 Dictionary<string, object>
,因此我可以动态地向其添加字段(这是使聚合工作的必要条件)
我在这里存储映射:
client.Map<MyDoc>(m => m.Index("myindexname").AutoMap());
现在我创建一条新记录并存储它:
var rec= new MyDoc();
rec.Add("id", "mystuff");
rec.text = "mytext";
client.Index(rec, i => i.Index("myindexname"));
client.Refresh("myindexname");
记录已实际存储,但文本字段未保留。这里是从 ElasticSearch 2.0
返回的 JSON
{
"_index": "myindexname",
"_type": "MyDoc",
"_id": "AVM3B2dlrjN2fcJKmw_z",
"_version": 1,
"_score": 1,
"_source": {
"id": "mystuff"
}
}
如果我从 MyDoc
中删除基础 class,text
字段存储正确但显然字典内容不是(我还需要删除 .Add()
有点因为文档没有继承自 Dictionary
).
如何同时存储text
字段和字典内容?
抱歉,我在之前的 post 中写错了建议,所以我删除了它。
我认为问题实际上在于序列化,因为您的基础 class 是 Dictionary
我会做两件事,首先尝试序列化您的对象以查看输出字符串我很确定文本被忽略了。
其次,我会将 class 更改为以下
public class MyDoc : Dictionary<string, object>
{
public string text
{
get
{
object mytext;
return TryGetValue("text", out mytext) ? mytext.ToString() : null;
}
set { this.Add("text", value);}
}
}
PS。因为我认为问题出在 C# 方面,因为你继承自字典,
var rec = new MyDoc();
rec.Add("id", "mystuff");
rec.text = "mytext";
//Text2 is property public string text2 { get; set; }
rec.text2 = "mytext2";
var test = JsonConvert.SerializeObject(rec); //{"id":"mystuff","text":"mytext"}
这是我的文档:
[ElasticsearchType(Name = "MyDoc")]
public class MyDoc: Dictionary<string, object>
{
[String(Store = false, Index = FieldIndexOption.NotAnalyzed)]
public string text { get; set; }
}
如您所见,它继承自 Dictionary<string, object>
,因此我可以动态地向其添加字段(这是使聚合工作的必要条件)
我在这里存储映射:
client.Map<MyDoc>(m => m.Index("myindexname").AutoMap());
现在我创建一条新记录并存储它:
var rec= new MyDoc();
rec.Add("id", "mystuff");
rec.text = "mytext";
client.Index(rec, i => i.Index("myindexname"));
client.Refresh("myindexname");
记录已实际存储,但文本字段未保留。这里是从 ElasticSearch 2.0
返回的 JSON{
"_index": "myindexname",
"_type": "MyDoc",
"_id": "AVM3B2dlrjN2fcJKmw_z",
"_version": 1,
"_score": 1,
"_source": {
"id": "mystuff"
}
}
如果我从 MyDoc
中删除基础 class,text
字段存储正确但显然字典内容不是(我还需要删除 .Add()
有点因为文档没有继承自 Dictionary
).
如何同时存储text
字段和字典内容?
抱歉,我在之前的 post 中写错了建议,所以我删除了它。 我认为问题实际上在于序列化,因为您的基础 class 是 Dictionary
我会做两件事,首先尝试序列化您的对象以查看输出字符串我很确定文本被忽略了。
其次,我会将 class 更改为以下
public class MyDoc : Dictionary<string, object>
{
public string text
{
get
{
object mytext;
return TryGetValue("text", out mytext) ? mytext.ToString() : null;
}
set { this.Add("text", value);}
}
}
PS。因为我认为问题出在 C# 方面,因为你继承自字典,
var rec = new MyDoc();
rec.Add("id", "mystuff");
rec.text = "mytext";
//Text2 is property public string text2 { get; set; }
rec.text2 = "mytext2";
var test = JsonConvert.SerializeObject(rec); //{"id":"mystuff","text":"mytext"}