这里使用Springboot 2.7.12版本,Elasticsearch为7.15.0。
导入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
yaml文件配置:
elasticsearch:
uris: http://localhost:9200
构建实体类,这里为商品的SKU属性表
@Data
@Document(indexName = "skusearch")
public class SkuEs {
@Id
private String id;
@Field(type = FieldType.Text,analyzer = "ik_smart",searchAnalyzer = "ik_smart")
private String name;
private Integer price;
private Integer num;
private String image;
private String images;
private Date createTime;
private Date updateTime;
private String spuId;
private Integer categoryId;
//Keyword:不分词
@Field(type= FieldType.Keyword)
private String categoryName;
private Integer brandId;
@Field(type=FieldType.Keyword)
private String brandName;
@Field(type=FieldType.Keyword)
private String skuAttribute;
private Integer status;
}
构建service层进行复杂查询:指定条件查询,聚合查询,分页查询,排序查询,高亮等等
@Service
public class SkuSearchServiceImpl implements SkuSearchService {
@Autowired
ElasticsearchRestTemplate elasticsearchRestTemplate;
@Override
public Map<String, Object> search(Map<String, Object> map) {
if(map!=null&&map.size()>0) {
NativeSearchQueryBuilder queryBuilder = queryBuilder(map);
//分组查询
group(queryBuilder, map);
// NativeSearchQuery nativeSearchQuery = queryBuilder.build();
SearchHits<SkuEs> skuEsSearchHit