如何通过Elasticsearch为通过REST创建的对象创建唯一的ID?

问题描述 投票:0回答:1

简短版本:如何进行弹性搜索以生成对象的标识,并将其用作“ _id”并在对象中进行设置。

长版:在一个宁静的API中,我通常不知道要插入数据库中的对象的ID。例如,我可以为“意大利面沙拉”创建食谱

我的休息电话(和身体)将是这样的

POST /api/v1/recipe

{
  "title": "Pasta Salad",
  "details": "..."  
}

在C#中我对此的表示是这样的...

public class Recipe
{
    public int Id { get; set; }
    public string Title { get; set; }
    public string Details { get; set; }
}

我不希望调用者知道如何生成未使用过的ID,并且我希望存储该对象的任何对象都可以创建ID。通常,在数据库中,我需要一个序列/作为身份列生成以执行此操作。

然后读取将返回带有填充的下一个ID值的对象。

[如何在创建文档时让elasticsearch生成C#对象的Id属性,使其具有唯一性,然后在弹性搜索中将其用作_id值?

这是我在ConnectionSettings中拥有的

var connectionSettings = new ConnectionSettings(elasticSearchUri)
    .DefaultIndex(elasticSearchDefaultIndex)
    .DefaultMappingFor<Recipe>(r => r.IdProperty(x => x.Id));

这就是我在Elasticsearch中创建文档的方式...

        var recipe = new Recipe
        {
            Title = "Pasta Salad",
            Details = "..."
        };

        var response = await _elasticClient.IndexDocumentAsync(recipe);

浏览http://localhost:9200/default/_doc/_search

...因此elasticsearch已生成唯一的“ _id”值,但未在对象本身上设置“ Id”

"hits":{"total":{"value":1,"relation":"eq"},"max_score":1.0,"hits":[{"_index":"default","_type":"_doc","_id":"3oeo8W8BfYYLXBBW8Vac","_score":1.0,"_source":{"title":"Pasta Salad","details":"..."}}]}}

如果我在我的C#对象中包含一个ID,则_id和该对象的ID均已按预期设置,问题是,我在插入时不知道该ID,如何获得弹性搜索以获取下一个唯一ID?

"hits":{"total":{"value":1,"relation":"eq"},"max_score":1.0,"hits":[{"_index":"default","_type":"_doc","_id":"1","_score":1.0,"_source":{"id":1,"title":"Pasta Salad","details":"..."}}]}}

简短版本:如何进行弹性搜索以生成对象的标识,并将其用作“ _id”并在对象中进行设置。长版本:在一个宁静的API中,我通常不知道...

.net elasticsearch nest
1个回答
0
投票

您可以将“ _id”值分配为所需的任何值。因此,根据您的情况,将对象的Id值分配给Elasticsearch文档的_id属性即可。

© www.soinside.com 2019 - 2024. All rights reserved.