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;
}
}
