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}");
                }
  • 相关阅读:
    PAXOS: libevent_paxos
    R提高篇(五): 描述性统计分析
    R提高篇(四): 数据管理二
    R提高篇(三): 数据管理一
    锂电池知识
    R提高篇(二): 图形初阶
    R提高篇(一): 输入输出
    动力电池基本知识篇
    DW(六):polybase访问Azure Blob Storage
    DW(五):polybase集群安装
  • 原文地址:https://www.cnblogs.com/hnsongbiao/p/10076452.html
Copyright © 2011-2022 走看看