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
};
这里的构建错误是"Cannot implicitly convert Nest.Field[] to 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' 的定义,并且找不到接受类型 'Nest.SearchDescriptor' 的第一个参数的扩展方法 'Fields'(是您缺少 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"
};
对于第二部分,SearchRequest
上的 .Fields()
现在是 .StoredFields()
,为此 in line with the change in Elasticsearch, to indicate that it is to be used to retrieve stored fields only (those set to store:true
in the mapping). As noted in the issue, if you were using .Fields()
to retrieve a partial document from the _source
field, it is recommended that you use source filtering。
我有两段来自 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
};
这里的构建错误是"Cannot implicitly convert Nest.Field[] to 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' 的定义,并且找不到接受类型 'Nest.SearchDescriptor' 的第一个参数的扩展方法 'Fields'(是您缺少 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"
};
对于第二部分,SearchRequest
上的 .Fields()
现在是 .StoredFields()
,为此 in line with the change in Elasticsearch, to indicate that it is to be used to retrieve stored fields only (those set to store:true
in the mapping). As noted in the issue, if you were using .Fields()
to retrieve a partial document from the _source
field, it is recommended that you use source filtering。