ElasticSearch 查询方法示例 java

public List<PricePolicyConditionDTO> queryEs(OrderPriceOutDTO param, List<String> materialCodeList, List<String> categoryCodeList) {
		BoolQueryBuilder mainQueryBoolBuilder = new BoolQueryBuilder();
		//销售组织
		if (CharSequenceUtil.isNotEmpty(param.getSalesOrgCode())) {
			mainQueryBoolBuilder.must(QueryBuilders.termQuery(PricePolicyEsDataDTO.Fields.salesOrgCode + KEYWORD_SUFFIX, param.getSalesOrgCode()));
		}
		//价格类型
		if (CharSequenceUtil.isNotEmpty(param.getPriceTypeName())) {
			mainQueryBoolBuilder.must(QueryBuilders.termQuery(PricePolicyEsDataDTO.Fields.priceType + KEYWORD_SUFFIX, param.getPriceTypeName()));
		}
		//and ((policy_type = 'Foc') or (policy_type != 'Foc' and currency= #{currncy}))
		if (CharSequenceUtil.isNotEmpty(param.getCurrency())) {
			BoolQueryBuilder query1 = QueryBuilders.boolQuery();
			query1.must(QueryBuilders.termQuery(PricePolicyEsDataDTO.Fields.policyType + KEYWORD_SUFFIX, CommonConstant.FOC));
			BoolQueryBuilder query2 = QueryBuilders.boolQuery();
			query2.mustNot(QueryBuilders.termsQuery(PricePolicyEsDataDTO.Fields.policyType + KEYWORD_SUFFIX, CommonConstant.FOC));
			query2.must(QueryBuilders.termQuery(PricePolicyEsDataDTO.Fields.currency + KEYWORD_SUFFIX, param.getCurrency()));
			BoolQueryBuilder query3 = QueryBuilders.boolQuery();
			query3.should(query1);
			query3.should(query2);
			mainQueryBoolBuilder.must(query3);
		}
		//and policy_start_date >= sysdaye() and  policy_end_date <= sysdaye()
		mainQueryBoolBuilder.must(QueryBuilders.rangeQuery(PricePolicyEsDataDTO.Fields.policyStartDate).lte(LocalTimeUnit.getNowTime()));
		mainQueryBoolBuilder.must(QueryBuilders.rangeQuery(PricePolicyEsDataDTO.Fields.policyEndDate).gte(LocalTimeUnit.getNowTime()));

		// and [  (object_type = 'Product' and (object_code like '' or object_code like '' ) ) OR
		//  (object_type = 'ProductCategory' and (object_code like '' or object_code like '' ) )
		//  ]
		if (CollUtil.isNotEmpty(materialCodeList) || CollUtil.isNotEmpty(categoryCodeList)) {
			BoolQueryBuilder query4 = QueryBuilders.boolQuery();
			if (CollUtil.isNotEmpty(materialCodeList)) {
				BoolQueryBuilder query3 = QueryBuilders.boolQuery();
				BoolQueryBuilder query1 = QueryBuilders.boolQuery();
				query1.must(QueryBuilders.termQuery(PricePolicyEsDataDTO.Fields.objectType + KEYWORD_SUFFIX, CommonConstant.PRODUCT));
				query3.must(query1);
				BoolQueryBuilder query2 = QueryBuilders.boolQuery();
				materialCodeList.forEach(v -> {
					WildcardQueryBuilder queryBuilder1 = QueryBuilders.wildcardQuery(PricePolicyEsDataDTO.Fields.objectCode + KEYWORD_SUFFIX, "*" + v + "*");
					query2.should(queryBuilder1);
				});
				query3.must(query2);
				query4.should(query3);
			}
			if (CollUtil.isNotEmpty(categoryCodeList)) {
				BoolQueryBuilder query3 = QueryBuilders.boolQuery();
				BoolQueryBuilder query1 = QueryBuilders.boolQuery();
				query1.must(QueryBuilders.termQuery(PricePolicyEsDataDTO.Fields.objectType + KEYWORD_SUFFIX, CommonConstant.PRODUCT_CATEGORY));
				query3.must(query1);
				BoolQueryBuilder query2 = QueryBuilders.boolQuery();
				categoryCodeList.forEach(v -> {
					WildcardQueryBuilder queryBuilder1 = QueryBuilders.wildcardQuery(PricePolicyEsDataDTO.Fields.objectCode + KEYWORD_SUFFIX, "*" + v + "*");
					query2.should(queryBuilder1);
				});
				query3.must(query2);
				query4.should(query3);
			}
			mainQueryBoolBuilder.must(query4);
		}
		Query query = new NativeSearchQueryBuilder().withQuery(mainQueryBoolBuilder).build();
		SearchHits<PricePolicyEsDataDTO> searchHits = elasticsearchRestTemplate.search(query, PricePolicyEsDataDTO.class);
		List<PricePolicyEsDataDTO> collect = searchHits.getSearchHits().stream().map(SearchHit::getContent).collect(Collectors.toList());
		List<PricePolicyConditionDTO> policyConditionList = BeanUtil.copyToList(collect, PricePolicyConditionDTO.class);
		return dataScopeFilter(param, policyConditionList);
	}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值