NEST 5.x字段用法

时间:2016-11-27 21:07:28

标签: c# elasticsearch nest

我有两个来自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
        };

然后我失去了场上的权重。

第二场用户我一直遇到麻烦

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指令或装配参考?

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

1 个答案:

答案 0 :(得分:2)

最新版本中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()in line with the change in Elasticsearch,表示它仅用于检索存储的字段({{3 }})。如问题中所述,如果您使用.Fields()_source字段中检索部分文档,建议您使用those set to store:true in the mapping进行此操作。