public void TestFilterdQuery()
{
var termQuery = new TermQuery("type", "common");
var termFilter = new TermFilter("age", "24");
var filteredQuery = new FilteredQuery(termQuery,termFilter);
var result2 = client.Search(index, "type" , filteredQuery, 0, 5);
Assert.AreEqual(1, result2.GetTotalCount());
Assert.AreEqual(1, result2.GetHits().Hits.Count);
var wildQuery = new WildcardQuery("name", "张三*");
termFilter = new TermFilter("age", "23");
filteredQuery = new FilteredQuery(wildQuery, termFilter);
result2 = client.Search(index, "type" , filteredQuery, 0, 5);
Assert.AreEqual(1, result2.GetTotalCount());
Assert.AreEqual(1, result2.GetHits().Hits.Count);
Assert.AreEqual("张三丰",result2.GetHits().Hits[0].Source["name"]);
var boolQuery = new BoolQuery();
boolQuery.Must(new TermQuery("type", "common"));
boolQuery.Must(new WildcardQuery("name", "张三*"));
boolQuery.Should(new TermQuery("age", 24));
filteredQuery=new FilteredQuery(boolQuery,new TermFilter("age","23"));
result2 = client.Search(index, "type" , filteredQuery, 0, 5);
Assert.AreEqual(1, result2.GetTotalCount());
Assert.AreEqual(1, result2.GetHits().Hits.Count);
Assert.AreEqual("张三丰", result2.GetHits().Hits[0].Source["name"]);
filteredQuery = new FilteredQuery(boolQuery, new TermFilter("age", "24"));
result2 = client.Search(index, "type" , filteredQuery, 0, 5);
Assert.AreEqual(1, result2.GetTotalCount());
Assert.AreEqual(1, result2.GetHits().Hits.Count);
Assert.AreEqual("张三", result2.GetHits().Hits[0].Source["name"]);
filteredQuery = new FilteredQuery(boolQuery, new TermFilter("type", "common"));
result2 = client.Search(index, "type" , filteredQuery, 0, 5);
Assert.AreEqual(2, result2.GetTotalCount());
Assert.AreEqual(2, result2.GetHits().Hits.Count);
//test should
boolQuery = new BoolQuery();
boolQuery.Must(new TermQuery("type", "common"));
boolQuery.Must(new WildcardQuery("name", "张*"));
boolQuery.Should(new TermQuery("age", 24));
filteredQuery = new FilteredQuery(boolQuery, new TermFilter("type", "common"));
result2 = client.Search(index, "type" , filteredQuery, 0, 5);
Assert.AreEqual(3, result2.GetTotalCount());
Assert.AreEqual(3, result2.GetHits().Hits.Count);
boolQuery = new BoolQuery();
boolQuery.Must(new TermQuery("type", "common"));
boolQuery.Must(new WildcardQuery("name", "张*"));
boolQuery.Should(new TermQuery("age", 24));
boolQuery.Should(new TermQuery("age", 28));
boolQuery.Should(new TermQuery("age", 22));
//must+should ->[should] make nonsense
filteredQuery = new FilteredQuery(boolQuery, new TermFilter("type", "common"));
result2 = client.Search(index, "type" , filteredQuery, 0, 5);
Assert.AreEqual(3, result2.GetTotalCount());
Assert.AreEqual(3, result2.GetHits().Hits.Count);
boolQuery = new BoolQuery();
boolQuery.Should(new TermQuery("age", 24));
boolQuery.Should(new TermQuery("age", 28));
boolQuery.Should(new TermQuery("age", 22));
filteredQuery = new FilteredQuery(boolQuery, new TermFilter("type", "common"));
result2 = client.Search(index, "type" , filteredQuery, 0, 5);
Assert.AreEqual(1, result2.GetTotalCount());
Assert.AreEqual(1, result2.GetHits().Hits.Count);
Assert.AreEqual("张三", result2.GetHits().Hits[0].Source["name"]);
boolQuery.Should(new TermQuery("age", 25));
filteredQuery = new FilteredQuery(boolQuery, new TermFilter("type", "common"));
result2 = client.Search(index, "type" , filteredQuery, 0, 5);
Assert.AreEqual(2, result2.GetTotalCount());
Assert.AreEqual(2, result2.GetHits().Hits.Count);
}