如何解决SQL IN子句-NEST C#-ElasticSearch术语不适用于其他人过滤器
我正在使用具有相同Elasticsearch版本的nesT 6.0.1。 我正在尝试使用.Terms进行选择。单独运行就可以,但是与.Must等其他过滤器一起使用时,似乎.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)
)
)
)
)
);
解决方法
在布尔查询描述符上对Must
的调用是可分配的,因此在多次调用中,仅最后一个被分配给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)
)
)
)
)
);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。