And*_*ers 5 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
};
Run Code Online (Sandbox Code Playgroud)
这里的构建错误是“无法将 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
};
Run Code Online (Sandbox Code Playgroud)
但后来我失去了场权重。
我一直遇到麻烦的第二场 useagle 是
var searchResponse = client.Search<Page>(s => s
.MatchAll()
.From(from)
.Size(size)
.Fields(f => f.Field(fi => fi.Id).Field(fi => fi.SourceId))
);
Run Code Online (Sandbox Code Playgroud)
此处的构建错误是“Nest.SearchDescriptor”不包含“Fields”的定义,并且无法找到接受“Nest.SearchDescriptor”类型的第一个参数的扩展方法“Fields”(您是否缺少 using 指令或程序集引用?
在这种情况下,我没有获得可编译的东西。
最新版本的 5.x 中缺少转换Field[]为的隐式运算符;Fields除了其他有用的重载之外,我还将添加此内容以进入下一个版本。同时,您可以Fields使用强类型和增强功能构建 from 字段
Fields fields = ((Fields)Infer.Field<Document>(f => f.Property1, 1.2))
.And<Document>(f => f.Property2, 2)
.And<Document>(f => f.Property3, 5);
Run Code Online (Sandbox Code Playgroud)
您也可以使用字符串
Fields fields = new[]
{
"property1^1.2",
"property2^2",
"property3^5"
};
Run Code Online (Sandbox Code Playgroud)
对于第二部分,现在是.Fields()on ,与 Elasticsearch 中的更改一致,表示它仅用于检索存储的字段(那些在映射中设置的字段)。如问题中所述,如果您用于从字段检索部分文档,建议您为此使用源过滤。SearchRequest.StoredFields()store:true.Fields()_source