SpringBoot2.2.2使用Elasticsearch方案
<dependency> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
<version>${spring.boot.version}</version>
</dependency>
application.yml配置
spring: elasticsearch:
rest:
uris: http://127.0.0.1:9200
username: elastic
password: password123
2.使用方式
1.使用前准备
环境搭建
ELK(elasticsearch+logstash+kibana)安装
导入历史数据源数据,及做好数据同步方案。
Mysql数据同步Elasticsearch方案总结
针对想要的搜索效果使用合适的分词策略,及查询语句
Elasticsearch 默认分词器和中分分词器之间的比较及使用方法
2. 创建索引映射实体类
@Data@NoArgsConstructor
@AllArgsConstructor
@Builder
@Document(indexName = "category_taobao", type = "_doc", createIndex = false)
public class CategoryTaobaoIndexTemplate {
@Id
private Long id;
@Field(type = FieldType.Keyword)
private String spell;
@Field(type = FieldType.Text, analyzer = "ik_max_word")
private String name;
@Field(type = FieldType.Keyword)
private String sid;
@Field(type = FieldType.Keyword)
private String parent_id;
@Field(type = FieldType.Integer)
private Integer type;
@Field(type = FieldType.Integer)
private Integer level;
@Field(type = FieldType.Keyword)
private BigDecimal distribution_ratio;
@Field(type = FieldType.Integer)
private Integer sort;
@Field(type = FieldType.Date)
private Date ctime;
@Field(type = FieldType.Date)
private Date utime;
}
Spring Data通过注解来声明字段的映射属性,有下面的三个注解:
- @Document 作用在类,标记实体类为文档对象,常用属性
- indexName:对应索引库名称
- type:对应在索引库中的类型(elasticsearch7中已不支持,不指明使用类名的小写作为type,这里使用默认的“_doc”)
- createIndex:是否在初始化时自动场景索引,默认true
- shards:分片数量,默认5
- replicas:副本数量,默认1
- @Id 作用在成员变量,标记一个字段作为id主键
- @Field 作用在成员变量,标记为文档的字段,并指定字段映射属性:
- type:字段类型,取值是枚举:FieldType
- index:是否索引,布尔类型,默认是true
- store:是否存储,布尔类型,默认是false
- analyzer:分词器名称:ik_max_word
3. 使用ElasticsearchRepository及ElasticsearchRestTemplate
通过继承ElasticsearchRepository完成基本的CRUD及分页操作。以下是通过函数名操作查询的方式及使用@Query手动创建查询语句的方式
public interface CategoryTaobaoEsRepository extends ElasticsearchRepository<CategoryTaobaoIndexTemplate, Long>, CategoryTaobaoEsOperator { /**
* 一级类目搜索匹配
* @param name
* @param level
* @param pageable
* @return
*/
@Query("{"bool":{"must":[{"query_string":{"query":"?0","fields":["name"]}},{"query_string":{"query":"?1","fields":["level"]}}]}}")
Page<CategoryTaobaoIndexTemplate> findByNameAndLevel(String name, Integer level, Pageable pageable);
/**
* 一级类目排序搜索
* @param level
* @param pageable
* @return
*/
Page<CategoryTaobaoIndexTemplate> findByLevelOrderBySpellAsc(Integer level, Pageable pageable);
}
通过继承自定义的CategoryTaobaoEsOperator使用ElasticsearchRestTemplate去实现一些更为底层的操作。ElasticsearchRestTemplate更多是对ElasticsearchRepository功能的补充,里面提供一些更底层的方法
官网文档
以上是 SpringBoot2.2.2使用Elasticsearch方案 的全部内容, 来源链接: utcz.com/z/515375.html