因此,我有一个带有Id字段的对象;当我对其进行索引时,生成的文档具有预期的_source.id字段,但_id字段具有与_source.id相同的值。

例如,我有这个对象:

var obj = new Obj {
    ...
    Id = 'some_value',
    ...
};

索引后,我看到ES文档是这样的:
{
    ...
    "_id: "some_value",
    ...
    "_source" : {
        ...
        "id" : "some_value",
        ...
    }
}

问题是:是否有可能以某种方式禁用此行为?像,如何让Elasticsearch为_id生成值(如果可能)?

最佳答案

这是称为Id inference的功能。如果您不希望NEST不这样做,我建议

  • 将POCO上的Id属性重命名为
  • ElasticsearchType为POCO赋予属性,并为IdProperty分配不存在的属性名称

  • [ElasticsearchType(IdProperty = "do_not_infer_id")]
    public class MyDocument
    {
        public int Id { get; set; }
    }
    

    09-13 13:49