未设置NEST elasticsearch POCO的ID属性

时间:2018-07-03 07:09:58

标签: elasticsearch nest

美好的一天:

在NEST的搜索中,我的POCO有问题。当前,我可以搜索序列化到POCO的文档,但是,我的id属性为null:

JsonFormatNotSupported

因此我的IMultiSearchResponse responses = await this._elasticClient.MultiSearchAsync(ms => ms.Search<Facility>("FacilityWithReviews",s => s.Query(q => q.Nested(n => n.Path(p => p.Reviews) .Query(nq => nq.Term(t => t.Field(f=>f.Reviews.First().Id).Value(review.Id.ToString()))))) ) .Search<Facility>("FacilityWithoutReviews", s => s.Query(q => q.Ids(c => c.Values(facilityId))))); 已设置:

FacilityWithoutReviews

这是我的POCO:

var facilityWithOutReviews = responses.GetResponse<Facility>("FacilityWithoutReviews");

这是我的ElasticSearch请求和回复,以获取设施

[ElasticsearchType(Name="facility", IdProperty ="Id")]
public class Facility
{

    public string Id { get; set; }

1 个答案:

答案 0 :(得分:0)

如果请求中没有ID,Elasticsearch将在为文档建立索引时为其生成ID。此ID保留在元数据中,并作为文档命中的_id元数据中的hits字段返回,原始索引文档返回为_source字段。反序列化时,NEST不会将元数据中的_id值分配给POCO上的Id值。

NEST的作用是查看要索引的POCO,如果它包含Id属性,或者告诉它将哪个属性视为“ id”属性,它将发送的值。此属性作为Elasticsearch的ID值。在这种情况下,当查询该文档时,匹配元数据中以_id返回的id值将与_source文档中返回的id值相同。 NEST中的此功能称为Id inference,这意味着您可以使用Ids

高兴地将文档建模为POCO。