7

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

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

编辑

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

4

3 回答 3

2

正如@Duc.Duong 在评论中所说,您可以使用DocumentWithMeta. 在当前版本的 NEST中,您应该将DocumentsWithMetaData其替换为from to 。HitsIHit<DataForGet>.Idstringint

这是我的代码:

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();
于 2014-10-26T11:38:39.037 回答
2

自动生成 ID

不指定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
}
于 2015-03-12T12:07:12.560 回答
-1

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

例如:

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

public class DataForGet : DataForIndex
{
    public int Id { get; set; }
}
于 2013-10-24T03:38:31.103 回答