繁体   English   中英

NEST 5.x字段用法

[英]NEST 5.x Fields Usage

我有来自Nest 2.3的两个代码段,这些代码段我无法在最新的5.0.0-rc3中进行合作。

var titleField = Infer.Field<Page>(p => p.Title, 2);
        var metaDescriptionField = Infer.Field<Page>(p => p.MetaDescription, 1.5);
        var metaKeywordsField = Infer.Field<Page>(p => p.Keywords, 2);
        var bodyField = Infer.Field<Page>(p => p.Body);

        MultiMatchQuery multiMatchQuery = new MultiMatchQuery()
        {
            Fields = new [] {
                bodyField, 
                metaKeywordsField,
                metaKeywordsField,
                titleField
            },
            Query = search.Term
        };

此处的构建错误是“无法将Nest.Field []隐式转换为Nest.Fields”。 我可以做类似的事情

MultiMatchQuery multiMatchQuery = new MultiMatchQuery()
        {
            Fields = Infer.Fields<Page>(p => p.Title, p => p.MetaDescription, p => p.Keywords, p => p.Body),
            Query = search.Term
        };

但是后来我失去了领域权重。

我一直遇到麻烦的第二场useagle是

var searchResponse = client.Search<Page>(s => s
            .MatchAll()
            .From(from)
            .Size(size)
            .Fields(f => f.Field(fi => fi.Id).Field(fi => fi.SourceId))
            );

这里的构建错误是“ Nest.SearchDescriptor”不包含“ Fields”的定义,并且找不到扩展方法“ Fields”接受类型为“ Nest.SearchDescriptor”的第一个参数(您是否缺少using指令或程序集引用?

在这种情况下,我没有获得任何可编译的东西的运气。

在最新版本的5.x中缺少将Field[]转换为Fields的隐式运算符。 除了其他有用的重载之外,我还将添加它,以进入下一个版本。 同时,您可以使用强类型化和增强功能的字段构造Fields

Fields fields = ((Fields)Infer.Field<Document>(f => f.Property1, 1.2))
                    .And<Document>(f => f.Property2, 2)
                    .And<Document>(f => f.Property3, 5);

您也可以使用字符串

Fields fields = new[]
{
    "property1^1.2",
    "property2^2",
    "property3^5"
};

对于第二部分, .Fields()SearchRequest现在是.StoredFields() 与在Elasticsearch变更线 ,以指示它是被用来检索存储字段仅( 那些设置为store:true在映射 ) 。 如问题中所述,如果您使用.Fields()_source字段中检索部分文档,则建议对此使用源过滤

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM