美好的一天:
在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; }
答案 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