Elasticsearch整合Springboot实现基本的全文检索

本教程仅做个人工作笔记,可能不适用于他人的工作/学习

写在前面

实际生产中,除了考虑产品的性能跟用户体验之外,生产成本也是要考虑的,如果系统是小系统,想对某一个表(200w)做全文检索的话,可以考虑使用mysql自带的full_text索引,没必要使用elasticsearch,毕竟开发相关功能、维护还有服务器的费用,都是相当可观的一笔支出

以下是在mysql中的测试,数据是260w左右

-- 无设置索引 260万条数据查询大概4秒/新增索引之后消耗0.01秒
SELECT * FROM full_text WHERE title = '中国药学杂志'
-- 设置索引后模糊查询还是消耗4秒多,说明百分号前置的情况下索引不生效
SELECT * FROM full_text WHERE title LIKE '%中国药学杂志'
-- 如果将百分号后置,则能使用索引查询,消耗0.01秒
SELECT * FROM full_text WHERE title LIKE '中国药学杂志%'
-- 如果前后都放置%符号,也是不走索引查询的
SELECT * FROM full_text WHERE title LIKE '%中国药学杂志%'
-- 当表中有数据时,新增索引消耗了12秒
ALTER TABLE full_text ADD INDEX index_title (title)

适当的设置索引还是可以很大程度解决查询慢的问题的(前提是充分理解业务,将表设计好)

当然如果很有钱或者是想用ELK全套的,另说

Elasticsearch整合Springboot实现基本的全文检索

前期准备

  • 项目为springboot+maven
  • 正确部署可用elasticsearch服务

添加相关依赖

根据你的elasticsearch版本选择合适的maven依赖,添加到项目中,截至今天2019/12/27,maven上最新的spring-data-elasticsearch的版本是3.2.3.RELEASE,笔者使用es版本是6.6,maven依赖如下

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
            <version>2.0.0.RELEASE</version>
</dependency>

创建实体类(Mappings)
Elasticsearch一个核心就是mappings【Elasticsearch的mappings】
es的java高级客户端可以通过拼接json去创建一个mappings,代码相对繁琐一点,spring-data-elasticsearch提供了一种用注释创建mappings的方案,首先我们创建一个基本的实体类,如

public class Metadata implements Serializable {
    private static final long serialVersionUID = 1L;
    private Long recordId;
    private Integer metadataType;
    private Long bookRecNo;
    private String title;
}

稍微做一下改动

import org.springframework.data.elasticsearch.annotations.Field;

@Data
@Document(indexName = "your_index_name", type = "metadata")
public class Metadata implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    @JsonSerialize(using = ToStringSerializer.class)
    private Long recordId;

    @Field(type = FieldType.Integer)
    private Integer metadataType;

    @Field
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值