Nest.Search< T>如何使用Hits.Fields.FieldValue获得短的字

本文关键字:short object Fields Search 何使用 Nest Hits FieldValue | 更新日期: 2023-09-27 18:09:34

我试图在使用返回ISearchResponse<T>Search<T>期间只返回所需的字段

我正在指定要带回的字段,例如字段("abspath","URLLen"),这些确实在响应的Hits对象中带回。

注意:页面是我的DTO和包含公共属性的abspath (string) &URLLen(短)。

文档中用于获取包含字符串的字段的方法可以正常工作:

var abspath = Hits.Fields.FieldValue<Page, string>(f => f.abspath)[0]

但是尝试使用short或int或long来执行此操作会失败,并且会出现null异常(因为URLLen是null):

var length= Hits.Fields.FieldValue<Page, short>(f => f.URLLen)[0]

我在这里错过了什么吗?

Nest.Search< T>如何使用Hits.Fields.FieldValue<object,short>获得短的字

它失败是因为在表达式解析(f=> f.r urllen)期间Resolve(…)方法Camel表示响应失败。

当然,从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