【发布时间】:2020-01-29 22:29:41
【问题描述】:
简短版:我如何获得弹性搜索来为对象生成身份,并将其用作“_id”并将其设置在对象中。
长版本:在一个 RESTful API 中,我通常不知道要插入数据库的对象的 ID。例如,我可能会为“Pasta Salad”创建一个食谱
我的休息电话(和身体)会是这样的
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属性,使其唯一,然后在elasticsearch中也用它作为_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":"..."}}]}}
如果我包含一个 id(在我的 C# 对象中),_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":"..."}}]}}
【问题讨论】:
标签: .net elasticsearch nest