【问题标题】:NEST 2.0 doesn't persist some fields into ElasticSearch 2.0NEST 2.0 不会将某些字段保留到 ElasticSearch 2.0 中
【发布时间】:2016-03-02 11:17:50
【问题描述】:

这是我的文件:

[ElasticsearchType(Name = "MyDoc")]
public class MyDoc: Dictionary<string, object>
{
    [String(Store = false, Index = FieldIndexOption.NotAnalyzed)]
    public string text { get; set; }
}

如您所见,它继承自 Dictionary&lt;string, object&gt;,因此我可以动态地向它添加字段(这是使聚合工作的必要条件)

我在这里存储映射:

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 中删除基类,text 字段被正确存储,但显然字典内容不是(我还需要删除.Add() 位,因为文档不是从@987654329 继承的@)。

如何同时存储text字段和字典内容?

【问题讨论】:

    标签: c# asp.net-web-api elasticsearch nest nest2


    【解决方案1】:

    对不起,我在之前的帖子中写了错误的建议,所以我删除了它。 我认为问题实际上在于序列化,因为您的基类是 Dictionary

    我会做两件事,首先尝试序列化你的对象以查看输出字符串,我很确定文本被忽略了。

    第二个我会改变类来跟随

    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);}
            }
        }
    

    附言。我认为问题出在 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"}
    

    【讨论】:

    • 谢谢。看起来像一个使用字典存储文本的包装器。没关系,但我正在寻找未存储正常字段的原因。必须可以同时存储普通字段和字典内容
    • 因为你是从字典继承的。
    • 好的,但是为什么如果我从字典继承其他字段会被忽略。这是硬连线到弹性搜索中的基本规则还是什么?
    • 它与C#有关,与elasticsearch无关,因为c#,序列化然后作为字符串发送到ES。
    • 尝试执行以下操作stackoverflow.com/questions/14893614/…我不确定它是否会起作用,因为我不累
    猜你喜欢
    • 1970-01-01
    • 2016-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-04
    相关资源
    最近更新 更多