美好的一天:
我正在尝试实现动态的布尔查询。例子...
QueryContainer addressQuery = null;
QueryContainer typeQuery = null;
BoolQueryDescriptor <Facility> boolQuery = new BoolQueryDescriptor<Facility>();
QueryContainerDescriptor<Facility> sh = new QueryContainerDescriptor<Facility>();
SearchDescriptor<Facility> mainSh = new SearchDescriptor<Facility>();
if (search.searchTerm != null)
{
addressQuery = sh.Term(f => f.Address, search.searchTerm) ||
sh.Match(m => m.Field(f => f.Address).Query(search.searchTerm) ) ||
sh.Term(f => f.ZipCode, search.searchTerm) ||
sh.Match(m => m.Field(f => f.State).Query(search.searchTerm));
boolQuery = boolQuery.Should(b => addressQuery);
}
if (search.type != null) {
typeQuery = sh.Term(f => f.Types.First(), search.type);
boolQuery = boolQuery.Must(b => typeQuery && addressQuery);
}
if (boolQuery != null)
{
mainSh = mainSh.Query(q => q.Bool(b => boolQuery));
request = await this._elasticClient.SearchAsync<Facility>(s => mainSh.Size(search.size));
}
此查询正在变成AddressQuery
和TypeQuery
之间的OR,但是,我想在两个查询之间达到 And 条件。有效地使查询动态化。这可能吗?示例:动态addressQuery && typeQuery
。
谢谢。
答案 0 :(得分:0)
将其发射出去。您可以&&
或||
查询容器...排序器,例如:
queryContainer1=queryContainer1 && queryContainer2
然后.bool(b => b(queryContainer1))
。