返回

谷粒商城之ElasticSearch进阶使用与项目整合指南

后端

ElasticSearch 进阶指南:在谷粒商城玩转搜索引擎

查询条件

ElasticSearch 的查询条件灵活多变,支持组合查询以实现多种搜索需求:

  • 模糊查询: 使用通配符 * 和 ? 进行模糊匹配,例如查找商品名称包含 "手机" 或 "电脑"。
  • 范围查询: 使用 between 和 not between 查询数值范围,例如查找价格在 100 到 500 之间的商品。
  • 日期查询: 使用 range 和 not range 匹配日期范围,例如查找 2023 年 1 月 1 日到 2023 年 12 月 31 日之间创建的商品。

查询部分字段

ElasticSearch 允许只查询部分字段,提高查询效率,例如仅查找商品名称和价格,忽略其他无关信息。

match、term、keyword 的用法

这三种查询类型各有用途:

  • match: 全文检索,匹配包含查询词语的所有文档。
  • term: 精确匹配,仅匹配与查询词语完全相同的文档。
  • keyword: 分词匹配,匹配包含查询词语分词后的所有文档。

映射和分词

映射: 将文档字段映射到 ElasticSearch 索引字段,明确字段的类型和格式。

分词: 将文本内容细化为分词,便于索引和查询。

SpringBoot 项目整合 ElasticSearch

将 ElasticSearch 集成到 SpringBoot 项目中:

1. 添加依赖

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

2. 配置 ElasticSearch

spring.elasticsearch.uris=http://localhost:9200

3. 创建实体类

@Document(indexName = "product")
public class Product {
  private Long id;
  private String name;
  private Double price;
}

4. 创建 ElasticSearch 操作类

@Repository
public interface ProductRepository extends ElasticSearchRepository<Product, Long> {
}

5. 查询操作

List<Product> products = productRepository.findAll();

常见问题解答

  1. 如何提高查询效率?

    • 使用适当的查询类型 (match/term/keyword)
    • 限制查询字段
    • 利用分词和索引
  2. 如何处理特殊字符和空格?

    • 使用转义字符或将特殊字符编码
    • 在分词器中定义自定义规则处理空格
  3. 如何创建自定义分词器?

    • 使用 AnalyzerBuilder 构建自定义分词器
    • 指定分词规则和分词器类型
  4. 如何管理索引生命周期?

    • 使用索引模板定义索引设置
    • 定期旋转或删除旧索引以优化存储空间
  5. 如何确保数据一致性?

    • 使用分布式事务机制
    • 定期进行索引验证和修复