我正在尝试在我想要的地方进行简单的查询:
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"
}
}
}
答案 0 :(得分:3)
这应该做你想要的:
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));
答案 1 :(得分:0)
我将过滤器更改为使用Match而不是Term,它似乎有效。
我不确定为什么会出现这种情况,但是当我使用Term使用Business_Unit进行搜索时,即使是单独使用,也不会返回任何结果。
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);
<强>更新强>
我能够使用匹配,但我只需要将值设为小写,这就解释了为什么它没有返回任何结果。
{
"query": {
"term": {
"BUSINESS_UNIT": "cspcn"
}
}
}