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

回到顶部