如何使用字段名称作为字符串创建MatchQueryDescriptor?

时间:2018-08-01 22:29:40

标签: nest elasticsearch-net

将Nest从5.4升级到6.2后,我找不到使用已知字段名称作为字符串来创建MatchPhraseQueryDescriptor的正确语法。看来.Field()方法不再采用字符串,而是采用对象路径。

按照Nest 6.2的Nest 5.4片段重新编写最简单的方法是什么?

var matchPhrase = new MatchPhraseQueryDescriptor<MyType>()
  .Field("MyField")
  .Query("MyQuery");

1 个答案:

答案 0 :(得分:0)

MatchPhraseQueryDescriptor<T>接受FieldExpression<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