Elasticsearch 7.17.3与NEST 7.17.3:模型字段值为空问题求助
解决NEST转换Elasticsearch响应到模型字段为null的问题
以下是几种可行的解决办法:
1. 使用NEST原生的字段映射属性
NEST默认不识别Newtonsoft的[JsonProperty]特性,改用NEST提供的[PropertyName]特性来绑定Elasticsearch中的字段名,修改后的Account类如下:
using Nest; public class Account { [PropertyName(AnalyticsFields.AccessRegions)] public string[] AccessRegions { get; set; } [PropertyName(AnalyticsFields.AccessUsers)] public string[] AccessUsers { get; set; } [PropertyName(AnalyticsFields.AccountId)] public string AccountId { get; set; } [PropertyName(AnalyticsFields.AccountIdAndName)] public string AccountIdAndName { get; set; } [PropertyName(AnalyticsFields.AdvisorId)] public string AdvisorId { get; set; } [PropertyName(AnalyticsFields.AdvisorIdAndName)] public string AdvisorIdAndName { get; set; } }
2. 配置NEST使用Newtonsoft.Json序列化器(若坚持用[JsonProperty])
如果不想替换属性特性,需要让NEST使用Newtonsoft.Json进行序列化:
- 先安装NuGet包:
NEST.JsonNetSerializer - 创建客户端时配置序列化器:
var settings = new ConnectionSettings(new Uri("http://your-es-url:9200")) .UseJsonNetSerializer(); var client = new ElasticClient(settings);
3. 验证字段名完全匹配
确认AnalyticsFields中定义的字段名和Elasticsearch文档中的字段名完全一致,包括大小写、下划线、连字符等格式,比如ES中字段是access_regions,AnalyticsFields.AccessRegions的值必须严格等于这个字符串。
4. 确保搜索请求返回完整的_source字段
检查你的搜索请求是否没有禁用_source或限制返回字段,确保_source包含所需数据。示例搜索请求:
var searchResponse = client.Search<Account>(s => s .Index("your-index-name") .Query(q => q.MatchAll()) .Source(s => s.IncludeAll()) // 确保返回完整_source );
内容的提问来源于stack exchange,提问作者Richi Sharma
相关产品推荐
相关产品推荐

