elasticsearch 复杂查询
发布日期:2022-11-23 16:43:18
BoolQueryBuilder boolQueryBuilder = new BoolQueryBuilder(); boolQueryBuilder.must(QueryBuilders.matchPhraseQuery("valid", "1")); boolQueryBuilder.must(QueryBuilders.matchPhraseQuery("verifyStatus", "1")); boolQueryBuilder.must(QueryBuilders.matchPhraseQuery("publishStatus", "1")); boolQueryBuilder.must(QueryBuilders.rangeQuery("startDt").to(new Date())); boolQueryBuilder.must(QueryBuilders.rangeQuery("endDt").from(new Date())); boolQueryBuilder.must(QueryBuilders.matchPhraseQuery("shopsId", "2aa9ccbf-2bd2-49f8-bcf9-57cb28995a29")); boolQueryBuilder.must(QueryBuilders.wildcardQuery("title", "*hujs*")); boolQueryBuilder.must(QueryBuilders.matchPhraseQuery("providerName", "测试hujs")); boolQueryBuilder.must(QueryBuilders.matchPhraseQuery("categoryId", "35f496c2-bb76-4f8b-9df1-20e0a291a1cd")); BoolQueryBuilder boolQueryBuilderNested = new BoolQueryBuilder(); boolQueryBuilderNested.must(QueryBuilders.matchPhraseQuery("listAttr.attrName", "服务性质")); boolQueryBuilderNested.must(QueryBuilders.matchPhraseQuery("listAttr.attrValue", "包干")); boolQueryBuilder.must(QueryBuilders.nestedQuery("listAttr", boolQueryBuilderNested, ScoreMode.None)); Sort sort = Sort.by("overallScore").descending(); Pageable pageable = PageRequest.of(0, 1); NativeSearchQuery nativeSearchQuery = new NativeSearchQueryBuilder() .withQuery(boolQueryBuilder) .withSort(sort) .withPageable(pageable) .build(); return elasticsearchRestTemplate.search(nativeSearchQuery, Product.class);
/** * @author :zhuyun */ @Schema(title = "ES商品实体类") @Data @Document(indexName = "zlx-product",createIndex = true) public class Product implements Serializable { @Id private String id; @Field(type = FieldType.Keyword) private String shopsId; @Field(type = FieldType.Text) private String shopsName; @Field(type = FieldType.Keyword) private String providerId; @Field(type = FieldType.Keyword) private String providerName; @Field(type = FieldType.Keyword) private String categoryId; @Field(type = FieldType.Keyword) private String categoryName; @Field(type = FieldType.Text,analyzer = "ik_max_word", searchAnalyzer = "ik_max_word") private String title; @Field(type = FieldType.Date, format = {}, pattern = "uuuu-MM-dd HH:mm:ss||strict_date_optional_time||epoch_millis") private Date startDt; @Field(type = FieldType.Date, format = {}, pattern = "uuuu-MM-dd HH:mm:ss||strict_date_optional_time||epoch_millis") private Date endDt; @Field(type = FieldType.Keyword) private String publishStatus; @Field(type = FieldType.Keyword) private String verifyStatus; @Field(type = FieldType.Date, format = {}, pattern = "uuuu-MM-dd HH:mm:ss||strict_date_optional_time||epoch_millis") private Date verifyDt; @Field(type = FieldType.Double) private BigDecimal price; @Field(type = FieldType.Keyword) private String valid; @Field(type = FieldType.Keyword) private String deleteId; @Field(type = FieldType.Date, format = {}, pattern = "uuuu-MM-dd HH:mm:ss||strict_date_optional_time||epoch_millis") private Date insertDt; @Field(type = FieldType.Long) private Long overallScore = 0L; @Field(type = FieldType.Long) private Long hotScore = 0L; @Field(type = FieldType.Long) private Long saleCount = 0L; @Field(type = FieldType.Long) private Long commentScore = 0L; @Field(type = FieldType.Text) private String imgUrl; @Field(type = FieldType.Nested) private List<SpuAttribute> listAttr; @Data public static class SpuAttribute { @Field(type = FieldType.Keyword) private String attrId; @Field(type = FieldType.Keyword) private String attrName; @Field(type = FieldType.Keyword) private String attrValueId; @Field(type = FieldType.Keyword) private String attrValue; @Field(type = FieldType.Integer) private Integer sort; } }