将Nest从5.4升级到6.2后,我找不到使用已知字段名称作为字符串来创建MatchPhraseQueryDescriptor的正确语法。看来.Field()方法不再采用字符串,而是采用对象路径。
按照Nest 6.2的Nest 5.4片段重新编写最简单的方法是什么?
var matchPhrase = new MatchPhraseQueryDescriptor<MyType>()
.Field("MyField")
.Query("MyQuery");
?
答案 0 :(得分:0)
MatchPhraseQueryDescriptor<T>
接受Field
或Expression<Func<T, object>>
作为.Field(...)
的参数,它们是从FieldNameQueryDescriptorBase
继承的:
public abstract class FieldNameQueryDescriptorBase<TDescriptor, TInterface, T>
: QueryDescriptorBase<TDescriptor, TInterface>, IFieldNameQuery
where TDescriptor : FieldNameQueryDescriptorBase<TDescriptor, TInterface, T>, TInterface
where TInterface : class, IFieldNameQuery
where T : class
{
Field IFieldNameQuery.Field { get; set; }
bool IQuery.IsVerbatim { get; set; }
bool IQuery.IsStrict { get; set; }
public TDescriptor Field(Field field) => Assign(a => a.Field = field);
public TDescriptor Field(Expression<Func<T, object>> objectPath) =>
Assign(a => a.Field = objectPath);
}
有一个隐式运算符可以将string
转换为Field
。