Elasticsearch Nest -具有多个过滤器的简单查询
本文关键字:过滤器 简单 查询 Nest -具 Elasticsearch | 更新日期: 2023-09-27 18:10:02
我想做一个简单的查询,我想:
select * from POC where Account_No = [accountno] and BUSINESS_UNIT = [business_unit]
下面的是我没有运气的东西。什么好主意吗?
var filters = new List<FilterContainer>();
filters.Add(new FilterDescriptor<poc>().Bool(b => b.Must(m => m.Term(i => i.Account_No, txtAccount.Text))));
filters.Add(new FilterDescriptor<poc>().Bool(b => b.Must(m => m.Term(i => i.BUSINESS_UNIT, txtBU.Text))));
var searchDescriptor = new SearchDescriptor<poc>();
// Filter with AND operator
searchDescriptor.Filter(f => f.And(filters.ToArray()));
var r = client.Search<poc>(searchDescriptor);
第二个过滤器似乎不起作用。当我运行这个时,我没有得到我不确定的记录。我在运行记录时看到它当我查看帐户查询
时{
"query": {
"term": {
"BUSINESS_UNIT": "CSPCN"
}
}
}
这应该是你想要的:
FilterContainer filter = null;
filter &= Filter<poc>.Term(i => i.Account_No, txtAccount.Text);
filter &= Filter<poc>.Term(i => i.BUSINESS_UNIT, txtBU.Text);
var r = client.Search<poc>(sd => sd.Filter(f => filter));
我将过滤器更改为使用Match而不是Term,它似乎有效。
我不知道为什么会出现这种情况,但是当我使用Business_Unit使用Term进行搜索时,即使是它本身,也不会返回任何结果。
var filters = new List<FilterContainer>();
filters.Add(new FilterDescriptor<poc>().Bool(b => b.Must(m => m.Query(q => q.Wildcard(z => z.Account_No, txtAccount.Text + "*")))));
filters.Add(new FilterDescriptor<poc>().Bool(b => b.Must(m => m.Query(q => q.Match(mat => mat.OnField(z => z.BUSINESS_UNIT).Query(txtBU.Text))))));
var searchDescriptor = new SearchDescriptor<poc>();
// Filter with AND operator
searchDescriptor.Filter(f => f.And(filters.ToArray()));
var r = client.Search<poc>(searchDescriptor);
我可以使用match,但我必须使值小写,这解释了为什么它不返回任何结果。
{
"query": {
"term": {
"BUSINESS_UNIT": "cspcn"
}
}
}