elasticsearch - NEST (ElasticSearch) 的动态布尔查询
问题描述
再会:
我正在尝试实现动态布尔查询。例子...
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));
}
这个查询正在变成一个 OR AddressQuery
,TypeQuery
但是,我想在两个查询之间实现一个And条件。有效地使查询动态化。这可能吗?示例:动态addressQuery && typeQuery
。
谢谢。
解决方案
将其解雇..您可以&&
或||
查询容器...分类器,例如:
queryContainer1=queryContainer1 && queryContainer2
然后.bool(b => b(queryContainer1))
。
推荐阅读
- javascript - OpenLayers 地图显示数据和交互的问题
- html - 如何在左侧制作带有徽标的单杠
- git - 如何获取所选分支历史记录中的所有标签,但只获取那些标签?
- javascript - 在javascript中将一种输入类型转换为另一种输入动作
- java - 使用 agg() 方法的 Spark 数据集计数行匹配条件(Java 中)
- angular - 如何使用离子将图像从相机存储到服务器
- azure-functions - 我无法从 python(Azure 函数)发送电子邮件(smtp.office365.com/587)
- javascript - 在对象数组中调用对象
- android - 在后台运行的服务应用程序
- java - 服务器从窗口和 linux 上的数据库返回不同的响应