{
"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. Nginx + Keepalived实现应用高可用负载均衡功能

    说明:此处仅介绍 Keepalived 实现nginx负载均衡器的高可用,关于nginx介绍和负载均衡实现可查看我的另两篇博文 Nginx负载均衡 和 Nginx配置了解 应用背景:实现高可用,避免单 ...

  2. Openlayers系列(一)关于地图投影相关错误的解决方案

    背景 近期开发以MongoDB为基础的分布式地理数据管理平台系统,被要求做一个简单的demo给客户进行演示.于是笔者便打算向数据库中存储一部分瓦片数据,写一个简单的存取服务器,使用Openlayers ...

  3. MyBatis Generator 生成器把其他数据库的同名表生成下来的问题

    [问题] 使用MyBatis Generator生成器时,发现Mapper文件中出现字段与连接数据库不符,经过查找发现该表是其他数据库的同名表的字段. [解决问题] 在构造文件中,这里是generat ...

  4. QT中使用google breakpad捕获程序崩溃异常

    今天给大家介绍一个在linux下如何捕获程序崩溃异常的方法 一.google breakpad源码的下载和编译 1.https://github.com/google/breakpad.git,源码地 ...

  5. RocketMQ4.3.x对顺序消息的理解

    1.RocketMQ消息队列简单介绍 这里简单介绍一下RocketMQ的消息队列的模型 一个topic对应多个队列如下图: 生产者和消费者分别向队列中发送和消费消息,生产者和消费者都可以是多个,通过组 ...

  6. 《重构》的读书笔记–方法列表

    第5章 重构列表 5.1 重构的记录格式103 5.2 寻找引用点105 5.3 这些重构手法有多成熟106 第6章 重新组织函数 6.1 (P110)Extract Method(提炼函数) 6.2 ...

  7. C# 中如何判断字符串的相似度

    基于 F23.StringSimilarity.dll  组件.Github 上可以搜索到该组件. 核心方法: var l = new Levenshtein(); double tempValue ...

  8. windows 和linux 路径解析的区别

    windows下使用的是“\”作为分隔符,而linux则反其道而行之使用"/"作为分隔符.所以在windows 环境中获取路径常见 C:\windows\system 的形式,而l ...

  9. 七 Struts2 文件上传和下载

    配置文件 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC &qu ...

  10. 基于Metronic的Bootstrap开发框架--资产编码打印处理

    在开发业务管理系统的时候,往往涉及到资产信息及编码的打印处理,如我们需要对资产信息.条形码.二维码一起打印,以便贴在具体资产信息上面,方便微信公众号.企业微信进行业务处理,那么编码的打印就很有必要了, ...