简短版本:如何进行弹性搜索以生成对象的标识,并将其用作“ _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);
...因此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中,我通常不知道...
您可以将“ _id”值分配为所需的任何值。因此,根据您的情况,将对象的Id值分配给Elasticsearch文档的_id属性即可。