自动id生成和映射_id NEST

时间:2013-10-23 13:56:20

标签: elasticsearch nest

我想在将文档索引到弹性搜索时自动生成id。当我没有在我的poco中指定Id属性时,这可以正常工作。

我想要做的是在获取索引时使用自动生成的id将底层的_id字段映射到我的poco类。看起来我可以指定id或者根本不指定id。他们是否缺少任何我认为的巢api选项?

修改

示例要点 https://gist.github.com/antonydenyer/9074159

3 个答案:

答案 0 :(得分:2)

正如@Duc.Duong在评论中所说,您可以使用DocumentWithMeta访问ID。 在NEST的当前版本DocumentsWithMetaData已替换为Hits,您也应该将IHit<DataForGet>.Idstring投射到int

这是我的代码:

public class DataForIndex
{
    public string Name { get; set; }
    // some other fields...
}

public class DataForGet : DataForIndex
{
    public int Id { get; set; }
}

var result = client.Search<DataForGet>(x => x.Index("index").MatchAll());
var list = results.Hits.Select(h =>
                                   {
                                       h.Source.Id = Convert.ToInt32(h.Id);
                                       return h.Source;
                                   }).ToList();

答案 1 :(得分:2)

Automatic ID Generation

  

可以在不指定id的情况下执行索引操作。在这种情况下,将自动生成id。此外,op_type将自动设置为create。这是一个例子(注意使用POST而不是PUT):

$ curl -XPOST 'http://localhost:9200/twitter/tweet/' -d '{
  "user" : "kimchy",
  "post_date" : "2009-11-15T14:12:12",
  "message" : "trying out Elasticsearch"
}'

结果:

{
  "_index" : "twitter",
  "_type" : "tweet",
  "_id" : "6a8ca01c-7896-48e9-81cc-9f70661fcb32",
  "_version" : 1,
  "created" : true
}

答案 2 :(得分:-1)

似乎NEST在类中自动检测“Id”字段并将其映射到ES中的“_id”。您的要求看起来很奇怪,但为什么不为它创建2个类?一个用于索引(没有Id字段),一个用于获取(从索引类继承并声明新字段“Id”)?

e.g:

public class DataForIndex
{
    public string Name { get; set; }
    // some other fields...
}

public class DataForGet : DataForIndex
{
    public int Id { get; set; }
}