spring-data-elasticsearch 多级嵌套对象查询

数据存储格式:

{
    "_index":"earth",
    "_type":"earth2",
    "_id":"n-3",
    "_version":1,
    "_score":1,
    "_source":{
        "jid":"n-3",
        "udateTime":"2018-01-30 14:10:04",
        "orderItem":[
            {
                "orderType":"RO",
                "orderDate":"20170708",
                "orderItems":[
                    {
                        "skuNo":"154018",
                        "stockSite":"0001",
                        "costOfSale":108.9
                    }
                ]
            }
        ]
    }
}

查询语句:

{
  "query": {
    "bool": {
      "must": [
        {
          "nested": {
            "path": "orderItem.orderItems",
            "query": {
              "bool": {
                "must": [
                  {
                    "match": {
                      "orderItem.orderItems.skuNo": "154018"
                    }
                  },
                  {
                    "match": {
                      "orderItem.orderItems.stockSite": "0001"
                    }
                  }
                ]
              }
            }
          }
        },
        {
          "nested": {
            "path": "orderItem",
            "query": {
              "bool": {
                "must": [
                  {
                    "match": {
                      "orderItem.orderType": "RO"
                    }
                  },
                  {
                    "match": {
                      "orderItem.orderDate": "20170708"
                    }
                  }
                ]
              }
            }
          }
        }
      ]
    }
  }
}

转换为spring-data-elasticsearch和java API查询:

		QueryBuilder orderItemsQuery = QueryBuilders.nestedQuery("orderItem.orderItems",
				QueryBuilders.boolQuery()
						.must(QueryBuilders.matchQuery("orderItem.orderItems.stockSite", "0001"))
						.must(QueryBuilders.matchQuery("orderItem.orderItems.skuNo", "154018")),
				ScoreMode.Total);

		QueryBuilder orderQuery = QueryBuilders.nestedQuery("orderItem",
				QueryBuilders.boolQuery()
						.must(QueryBuilders.matchQuery("orderItem.orderType", "RO"))
						.must(QueryBuilders.matchQuery("orderItem.orderDate", "20170708")),
				ScoreMode.Total);

		QueryBuilder queryBuilder = QueryBuilders.boolQuery().must(orderQuery).must(orderItemsQuery);

		Iterable<OrderItem> it = orderRepository.search(queryBuilder);
		List<OrderItem> list = Lists.newArrayList(it);
		System.out.println(list);
		


spring-data-elasticsearch官方教程文档提供了关于如何使用spring-data-elasticsearch框架进行Elasticsearch数据库操作的详细指导。该文档分为几个部分,包括介绍、快速入门、基本概念、查询构造器和复杂查询等。 文档的介绍部分简要介绍了spring-data-elasticsearch框架以及它提供的主要功能。快速入门部分通过一个简单的示例演示了如何配置spring-data-elasticsearch并进行基本的CRUD操作。该示例涵盖了创建索引、映射实体类、保存数据、查询数据以及删除数据。通过这个示例,读者可以迅速了解到spring-data-elasticsearch的基本用法。 基本概念部分详细介绍了spring-data-elasticsearch中的一些重要概念,包括实体类映射、索引操作、文档操作、字段映射、分页和排序等。这些概念对于深入理解spring-data-elasticsearch的使用非常重要。 查询构造器部分介绍了spring-data-elasticsearch提供的查询构造器的使用方法。该部分通过实例演示了如何使用查询构造器进行基本查询、范围查询、模糊查询以及布尔查询等。读者可以通过这些示例快速掌握查询构造器的使用。 最后一部分是关于复杂查询的介绍。这一部分介绍了如何使用原生查询、使用注解进行查询以及使用自定义实现进行查询等。复杂查询spring-data-elasticsearch一个非常重要的特性,通过它可以实现更加灵活和高级的查询功能。 总体来说,spring-data-elasticsearch官方教程文档提供了丰富的实例和详细的说明,对于想要学习和使用spring-data-elasticsearch框架的开发者来说,是一份非常有价值的指南。读者可以通过该文档逐步了解spring-data-elasticsearch的相关概念和基本用法,并通过实例演示快速上手。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值