2015-08-27 21 views
1

我試圖做一個簡單的查詢,我想:Elasticsearch巢 - 以多個濾波器簡單的查詢

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" 
    } 
    } 
} 

回答

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)); 
+0

我發現商業單位應該是小寫的。謝謝你的回覆 – H20rider

+0

啊,非常好。聽起來就像你在使用標準分析儀。您可以爲您的類型指定模式並使用不區分大小寫的不同分析器。 –

0

我更換過濾器,而不是使用期限匹配,它似乎工作。

我不確定爲什麼會出現這種情況,但是當我使用Term進行搜索時,即使是使用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); 

更新

我能使用的比賽,但我不得不做出價值小寫,這可以解釋爲什麼它沒有返回任何結果。

{ 
    "query": { 
    "term": { 
     "BUSINESS_UNIT": "cspcn" 
    } 
    } 
}