zoukankan      html  css  js  c++  java
  • Elasticsearch.Net 多层嵌套的逻辑实现

    {
      "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 = 1,
                    PageSize = 20
                };
    
    
                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}");
                }
  • 相关阅读:
    linux异常处理体系结构
    网站、架构、集群相关资源
    (转)分布式Web服务器架构的演变与技术需求
    B树、B树、B+树、B*树详解(转)
    (转)事件和路由事件概述
    LCID及Culture Name列表
    触摸键盘概述
    MySQL远端连接设置
    C#实现平衡多路查找树(B树) (转)
    CentOS6.3 LAMP运营环境安装
  • 原文地址:https://www.cnblogs.com/hnsongbiao/p/10076452.html
Copyright © 2011-2022 走看看