_id未在Elasticsearch中自动生成

时间:2015-04-01 14:04:27

标签: elasticsearch nest

我有一个SalesOrder类型的简单文档列表。将它们插入弹性搜索时,_id将获取SalesOrderId的值。我需要它自动生成。以下是我的课程

    public class SalesOrder
    {
        [XmlElement("Id")]
        public long SalesOrderId { get; set; }

        public long CustomerId { get; set; }

        public DateTime? BookedDate { get; set; }

        public long SalesOrderNo { get; set; }
     }

这是我在弹性搜索中插入文档的方式

            ElasticClient elasticClient = CreateElasticClient(indexName);

            if (!elasticClient.IndexExists(i => i.Index(indexName)).Exists)
            {
                elasticClient.CreateIndex(indexName, s => s.AddMapping<T>(m => m
                .MapFromAttributes()));
            }

            // create indexes
            var response = elasticClient.IndexMany<T>(documents);

1 个答案:

答案 0 :(得分:0)

您可以为ES指定Id字段,如下所示:

[ElasticType(Name = "salesOrder", IdProperty = "Id")]
public class SalesOrder
{        
    public string Id {get;set;}//this is used internally by ES

    public long SalesOrderId { get; set; }

    public long CustomerId { get; set; }

    public DateTime? BookedDate { get; set; }

    public long SalesOrderNo { get; set; }
 }

注意:如果您填充Id,它将使用该值插入ES。如果您将其保留为null,那么ES将自动为您创建它。

此外,如果您的SalesOrder类特定于ElasticSearch,那么它不应该有一个XmlElement标记。