{
"query": {
"bool": {
"must": [
{
"match_phrase": {
"to_province": "河南"
}
},
{
"match_phrase": {
"to_city": "信阳市"
}
},
{
"match_phrase": {
"to_district": "新县"
}
},
{
"bool": {
"should": [
{
"match_phrase": {
"from_city": "商丘市"
}
},
{
"bool": {
"must_not": {
"exists": {
"field": "from_city"
}
}
}
}
]
}
}
],
"must_not": [],
"should": []
}
},
"from": 0,
"size": 10,
"sort": [],
"aggs": {}
}

查询条件:前面3个是and关系,后面4和5是或者关系,

            ElasticsearchProvider provider = new ElasticsearchProvider();
ElasticsearchProvider es = new ElasticsearchProvider(); var elasticsearchPage = new ElasticsearchPage<AreaJiBao>(AreaJiBao.IndexName)
{
PageIndex = ,
PageSize =
}; var searchRequest = elasticsearchPage.InitSearchRequest();
var predicateList = new List<IPredicate>
{
Predicates.Field<AreaJiBao>(x => x.ToProvince, ExpressOperator.Like, "河南省"),
Predicates.Field<AreaJiBao>(x => x.ToCity, ExpressOperator.Like, "信阳市"),
Predicates.Field<AreaJiBao>(x => x.ToCity, ExpressOperator.Like, "新县")
};
// 前面3个是 and 关系
var predicate = Predicates.Group(GroupOperator.And, predicateList.ToArray()); // FromCity要不包含商丘市,要不就为空值
var predicateListExists = new List<IPredicate>
{
Predicates.Field<AreaJiBao>(x => x.FromCity, ExpressOperator.MustNotExists, null)
};
var predicateExists = Predicates.Group(GroupOperator.Or, predicateListExists.ToArray());
var predicateListTerm = new List<IPredicate>
{
Predicates.Field<AreaJiBao>(x => x.FromCity, ExpressOperator.Like, "商丘市")
};
var predicateOr = Predicates.Group(GroupOperator.Or, predicateListTerm.ToArray());
var predicatecCombinationChild = new List<IPredicate> { predicateExists, predicateOr };
var pgCombinationChild = Predicates.Group(GroupOperator.Or, predicatecCombinationChild.ToArray()); // 查询
var predicatecCombination = new List<IPredicate> { predicate, pgCombinationChild };
var pgCombination = Predicates.Group(GroupOperator.And, predicatecCombination.ToArray());
searchRequest.InitQueryContainer(pgCombination);
var data = provider.SearchPage(searchRequest);
foreach (var item in data.Documents)
{
Console.WriteLine($"{item.Id}");
}

Elasticsearch.Net 多层嵌套的逻辑实现的更多相关文章

  1. angularjs ui-view多视口多层嵌套路由配置

    最近研究了一下ui-view多层嵌套,整理了一下 1.最简单的ui-view用法 html部分: <ul class="nav navbar-nav"> <li ...

  2. ASP.NET提取多层嵌套json数据的方法

    本文实例讲述了ASP.NET利用第三方类库Newtonsoft.Json提取多层嵌套json数据的方法,具体例子如下. 假设需要提取的json字符串如下: {"name":&quo ...

  3. 元素多层嵌套,JS获取问题

    如果一段html嵌套过多,在js中获取还是比较麻烦的,我写了几套方案,大家可以参考参考,如果你有好的方法,也分享出来,让我们瞧瞧. HTML: <!DOCTYPE html> <ht ...

  4. .net(c#)提取多层嵌套的JSON

    Newtonsoft.Json.Net20.dll 下载请访问http://files.cnblogs.com/hualei/Newtonsoft.Json.Net20.rar 在.net 2.0中提 ...

  5. require或include相对路径多层嵌套引发的问题

    require或include相对路径多层嵌套引发的问题   php中require/include 包含相对路径的解决办法 在PHP中require,include一个文件时,大都是用相对路径,是个 ...

  6. c#多层嵌套Json

    Newtonsoft.Json.Net20.dll 下载请访问http://files.cnblogs.com/hualei/Newtonsoft.Json.Net20.rar 在.net 2.0中提 ...

  7. Android 动态生成布局 (多层嵌套)

    Android 除了能够载入xml文件,显示布局外,也能够代码生成布局,并通过setContentView(View view)方法显示布局.单独的一层布局,如一个主布局加一个控件(如Button\i ...

  8. 【转】一个工具类(可以控制多层嵌套的movieClip)

    好多人也应该遇到和我一样的问题,当设计师给了我们一个多层嵌套的movieClip时,我们在写代码时无法将movieClip完全停止掉,主要是基于好多movieClip有深层嵌套,主时间轴不在最上层导致 ...

  9. 提取多层嵌套Json数据

    在.net 2.0中提取这样的json {"name":"lily","age":23,"addr":{"ci ...

随机推荐

  1. HTTP概念解析

    HTTP--Hyper Text Transfer Protocol HTTP详细介绍(火星的小白 51CTO): https://blog.51cto.com/13570193/2108347 先进 ...

  2. 记一次使用SimpleDateFormat 格式化时间时遇到的问题

    网上的使用方法一大堆,我就不再介绍了,就写一下自己遇到的问题. 先来实现一下获取当前时间: SimpleDateFormat simpleDateFormat =new SimpleDateForma ...

  3. ubuntu18.04 ssh 远程系统拒绝连接 解决方法

    错误提示是这个: The remote system refused the connection. 原因是 Ubuntu 没安装  一个软件, 废话不多说 ,上解决方法: 执行该条命令,安装 ,安装 ...

  4. 使用Log4Net进行错误日志记录

    http://blog.csdn.net/zdw_wym/article/details/48802821

  5. java倒计时三种简单实现方式

    写完js倒计时,突然想用java实现倒计时,写了三种实现方式 一:设置时长的倒计时: 二:设置时间戳的倒计时: 三:使用java.util.Timer类实现的时间戳倒计时 代码如下: package ...

  6. 安装了精简版的windows 的电脑如何修复?参照的程序集没有安装在系统上

    我利用网络上的windows 10 纯净版来进行安装windows 10 镜像的时候,发现很多的windows 的服务都是不能用的.比如启动/删除 windows 功能就是不能用的,会出现如下信息: ...

  7. Jdk 接口类RandomAccess了解

    1. 接口说明 Marker interface used by List implementations to indicate that they support fast (generally ...

  8. Excel自定义公式,类似VLOOKUP的查询

    Excel在使用VLOOKUP时,当检索值超过255长度的时候就会报错,没法正常检索. 官方提供的办法是通过INDEX和MATCH公式组合使用来解决. 微软官方方案 1,公式 =INDEX($A$5: ...

  9. python接口自动化-post请求2

    一.headers 1.以禅道登录为例,模拟登陆,这里需添加请求头headers,可以用fiddler抓包 2.将请求头写成字典格式 h = { "Connection": &qu ...

  10. Linux云计算运维-MySQL

    0.建初心 优秀DBA的素质 1.人品,不做某些事情2.严谨,运行命令前深思熟虑,三思而后行,即使是依据select3.细心,严格按照步骤一步一步执行,减少出错4.心态,遇到灾难,首先要稳住,不慌张, ...