I have two snippets of code from nest 2.3 that I haven't been able to get to cooperate in the latest 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
};
The build error here is "Cannot implicitly convert Nest.Field[] to Nest.Fields". I can do something like
MultiMatchQuery multiMatchQuery = new MultiMatchQuery()
{
Fields = Infer.Fields<Page>(p => p.Title, p => p.MetaDescription, p => p.Keywords, p => p.Body),
Query = search.Term
};
But then I lose the field weighting.
Second field useagle I've been having troubles with is
var searchResponse = client.Search<Page>(s => s
.MatchAll()
.From(from)
.Size(size)
.Fields(f => f.Field(fi => fi.Id).Field(fi => fi.SourceId))
);
Build error here is 'Nest.SearchDescriptor' does not contain a definition for 'Fields' and no extension method 'Fields' accepting a first argument of type 'Nest.SearchDescriptor' could be found (are you missing a using directive or an assembly reference?
I haven't had any luck with getting something compile-able in the case.
The implicit operator that converts Field[]
to Fields
is missing in 5.x in the latest release; I will add this in addition to other helpful overloads, to go into the next release. In the meantime, you can construct a Fields
from fields with strong typing and boosting using
Fields fields = ((Fields)Infer.Field<Document>(f => f.Property1, 1.2))
.And<Document>(f => f.Property2, 2)
.And<Document>(f => f.Property3, 5);
You can also use strings too
Fields fields = new[]
{
"property1^1.2",
"property2^2",
"property3^5"
};
For the second part, .Fields()
on SearchRequest
is now .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 for this.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With