我尝试在使用返回Search<T>
的{{1}}期间仅返回必填字段
我正在指定要返回的字段,例如字段(&#34; abspath&#34;,&#34; URLLen&#34;),这些确实被带回到响应中&#39;击中对象。
注意:Page是我的DTO,包含abspath(string)&amp;的公共属性。 URLLen(短)。
获取包含字符串的字段的文档化方法可以正常工作:
ISearchResponse<T>
但尝试使用short或int或long执行此操作会因null异常而失败(因为URLLen为null):
var abspath = Hits.Fields.FieldValue<Page, string>(f => f.abspath)[0]
我在这里错过了一些东西吗?
答案 0 :(得分:1)
失败是因为在表达式解析(f =&gt; f.URLLen)期间Resolve(...)方法 骆驼案的反应如此失败。
确实从github下载源代码并添加单元测试确认了这一点。 将es对象字段名称更改为“uRLLen”可以解决问题。 问题代码区域是
public string Resolve(MemberInfo info)
{
if (info == null)
return null;
var name = info.Name;
**var resolvedName = name.ToCamelCase();**
var att = ElasticAttributes.Property(info);
if (att != null && !att.Name.IsNullOrEmpty())
resolvedName = att.Name;
return resolvedName;
}
这是设计使用 - 请参阅http://elasticsearch-users.115913.n3.nabble.com/lowercase-property-names-from-NET-using-NEST-td4039978.html 以获取快速修复。另见 http://nest.azurewebsites.net/nest/index-type-inference.html