NEST 2.x 条款查询不能接受 2 个参数

NEST 2.x Terms Query cannot accept 2 arguments

如何将下面的 NEST 1.x 表达式重写为 NEST 2.x 或 5.x

var searchResult = _elasticClient.Search<SearchResult>(
                request => request
                    .MinScore(0.7)
                    .Query(q =>
                    {
                        QueryContainer query = null;
                        query &= q.Terms<int>(t => t.Categories
                        .SelectMany(s => s.ChildCategories.Select(c => c.Id))
                        .ToArray(),
                        categories.Select(c => Convert.ToInt32(c)));

接受 List(),其中包含弹性搜索查询应匹配的 ids 元素

query &= q.Terms(c => c.Field(t => t.Categories.SelectMany(s => s.ChildCategories.Select(d => d.Id))));

This line will below complain about Terms has 1 parameter, but invoked with 2
query &= q.Terms(c => c.Field(t => t.Categories.SelectMany(s => s.ChildCategories.Select(d => d.Id))), new List<int> {1});

更新:

elasticsearch documentation for 1.X 上的最后一个示例包含字段和 qff.Terms(p => p.Country, userInput.Countries) 我想在 NEST 5.x 或 2.x

中实现

Take a look at the Terms query documentationterms 查询需要一个包含要匹配的术语和要匹配的术语集合的字段。

可以使用 .Field()which can take anything from which a Field can be inferred 指定要匹配的字段,包括字符串或 Lambda 表达式。

可以使用 .Terms() 指定要匹配的值,这是一个术语集合。

鉴于以下 POCO

public class Project
{
    public IEnumerable<string> Tags { get; set; }
}

标签字段上的 terms 查询将是

var searchResponse = client.Search<Project>(s => s
    .Query(q => q
        .Terms(t => t
            .Field(f => f.Tags)
            .Terms("tag1", "tag2", "tag3")
        )
    )
);