nest c#-elasticsearch terms不与其他筛选器一起使用

ghg1uchk  于 2021-06-14  发布在  ElasticSearch
关注(0)|答案(1)|浏览(342)

我正在使用nest6.0.1和elasticsearch版本相同。我想用术语来做一个选择。单独,它可以工作,但与其他过滤器一起,如。必须。。。似乎.terms忽略了.must筛选器。

// Params comming in request method:
ElasticClient client, int maximumRows, string jobId, string merchantId, string category, ICollection<int> priorityFilterCollection

var searchResponse = client.Search<LogEntity>(s => s
                                        .From(0)
                                        .Size(maximumRows)
                                        .Query(q => q
                                            .Bool(b => b
                                                .Must(
                                                    sd => sd.MatchPhrase(m => m
                                                        .Field(f => f.JobId)
                                                        .Query(jobId)
                                                        )
                                                )
                                                .Must(
                                                    sd => sd.MatchPhrase(m => m
                                                        .Field(f => f.MerchantId)
                                                        .Query(merchantId)
                                                        )
                                                )
                                                .Must(
                                                    sd => sd.MatchPhrase(m => m
                                                        .Field(f => f.Category)
                                                        .Query(category)
                                                        )
                                                )
                                                .Must(
                                                    sd => sd.Terms(m => m
                                                        .Field(f => f.Priority)
                                                        .Terms<int>(priorityFilterCollection)
                                                        )
                                                )
                                            )
                                        )
                                    );
hfyxw5xn

hfyxw5xn1#

打电话给 Must 在bool上,查询描述符是赋值的,因此对于多个调用,只有最后一个被赋值给must子句。bool查询需要重写才能传递多个must子句

var searchResponse = client.Search<LogEntity>(s => s
    .From(0)
    .Size(maximumRows)
    .Query(q => q
        .Bool(b => b
            .Must(
                sd => sd.MatchPhrase(m => m
                    .Field(f => f.JobId)
                    .Query(jobId)
                    ),
                sd => sd.MatchPhrase(m => m
                    .Field(f => f.MerchantId)
                    .Query(merchantId)
                    ),
                sd => sd.MatchPhrase(m => m
                    .Field(f => f.Category)
                    .Query(category)
                    ),
                sd => sd.Terms(m => m
                    .Field(f => f.Priority)
                    .Terms<int>(priorityFilterCollection)
                    )
            )
        )
    )
);

查看编写bool查询文档

相关问题