乐途乐途
主页
  • 计算机基础

    • TCP/IP
    • Linux
    • HTTP
  • 数据库

    • SQL
    • MySQL 5.7
  • 编程语言

    • C
    • C++
    • Java SE
    • Python2
    • Python3
  • 数据格式

    • JSON
    • XML
  • 认证与安全

    • JWT
  • 工具

    • Markdown
  • Git

    • GitFlow
  • Quartz

    • Quartz
  • Java

    • Maven 入门
    • Maven 进阶
    • MyBatis
    • Spring
    • Spring MVC
  • Java

    • Spring Boot
    • Spring Cloud
    • Spring Cloud Alibaba
    • Spring Security
    • Spring AI
    • Spring Batch
    • Kafka
    • Java 设计模式
  • 缓存

    • Redis
  • 搜索引擎

    • Elasticsearch
  • 分布式协调

    • ZooKeeper
联系
阿里云
主页
  • 计算机基础

    • TCP/IP
    • Linux
    • HTTP
  • 数据库

    • SQL
    • MySQL 5.7
  • 编程语言

    • C
    • C++
    • Java SE
    • Python2
    • Python3
  • 数据格式

    • JSON
    • XML
  • 认证与安全

    • JWT
  • 工具

    • Markdown
  • Git

    • GitFlow
  • Quartz

    • Quartz
  • Java

    • Maven 入门
    • Maven 进阶
    • MyBatis
    • Spring
    • Spring MVC
  • Java

    • Spring Boot
    • Spring Cloud
    • Spring Cloud Alibaba
    • Spring Security
    • Spring AI
    • Spring Batch
    • Kafka
    • Java 设计模式
  • 缓存

    • Redis
  • 搜索引擎

    • Elasticsearch
  • 分布式协调

    • ZooKeeper
联系
阿里云
  • 学习路径
  • 全文搜索与Elasticsearch概述

    • 全文搜索与搜索引擎概述
    • Elasticsearch 与 Lucene 的关系
    • Elasticsearch 核心架构
  • 安装与快速上手

    • 安装 Elasticsearch
    • 快速上手
  • 索引、文档与映射

    • 索引
    • 文档与 CRUD
    • 元数据字段
    • 字段映射
    • 动态映射
    • Reindex 操作
  • 文本分析与分词

    • 倒排索引的构建与原理
    • 分词器组成
    • IK 分词器与自定义词典
    • 近实时搜索原理
    • Ingest Pipeline 数据预处理
  • 搜索基础(Query DSL)

    • match 查询
    • multi_match 多字段查询
    • match_phrase 短语匹配
    • term 与 terms 查询
    • range 范围查询
    • bool 查询
    • 高亮显示与分页
    • 深度分页与遍历
  • 相关性评分与排序

    • BM25 相关性评分
    • 排序与自定义评分
    • Painless 脚本基础
  • 聚合分析(Aggregations)

    • 指标聚合
    • 桶聚合
    • 管道聚合
  • 分布式集群原理

    • 节点与角色
    • 分片与副本
    • 路由
    • 选举与脑裂
    • 快照与恢复
  • 数据建模与最佳实践

    • 索引设计原则与模板
    • 嵌套对象与父子文档
  • 性能优化与运维监控

    • 写入性能优化
    • 搜索性能优化
    • ILM 索引生命周期管理
    • 集群监控与故障排查
  • 面试考点与实战场景

    • 实战案例:课程搜索引擎
    • Elasticsearch 面试考点精选

实战案例:课程搜索引擎

本章定位:综合运用全教程所学知识,从零搭建一个完整的课程搜索引擎。覆盖 Mapping 设计、搜索查询、聚合分析、自定义排序和性能优化。


业务需求

飞翔科技的在线教育平台需要升级课程搜索功能:

  1. 搜索:按课程名称、描述、大纲搜索(支持中文分词)
  2. 筛选:按分类、教师、价格范围筛选
  3. 排序:相关性 + 报名人数 + 评分综合排序
  4. 聚合:按分类统计课程数、平均价格、平均评分
  5. 高亮:搜索结果中高亮匹配词

完整示例

第一步:Mapping 设计

PUT /courses
{
  "settings": {
    "number_of_shards": 3,
    "number_of_replicas": 1,
    "analysis": { "analyzer": { "ik_smart_analyzer": { "type": "custom", "tokenizer": "ik_smart", "filter": ["lowercase"] } } }
  },
  "mappings": {
    "dynamic": "strict",
    "properties": {
      "title": { "type": "text", "analyzer": "ik_max_word", "search_analyzer": "ik_smart", "fields": { "keyword": { "type": "keyword" } } },
      "teacher": { "type": "keyword" },
      "category": { "type": "keyword" },
      "description": { "type": "text", "analyzer": "ik_max_word" },
      "outline": { "type": "text", "analyzer": "ik_max_word", "norms": false },
      "price": { "type": "scaled_float", "scaling_factor": 100 },
      "rating": { "type": "float" },
      "enrollment_count": { "type": "integer" },
      "publish_date": { "type": "date", "format": "yyyy-MM-dd" },
      "tags": { "type": "keyword" }
    }
  }
}

第二步:综合搜索

POST /courses/_search
{
  "query": {
    "function_score": {
      "query": {
        "bool": {
          "must": [{ "multi_match": { "query": "数据", "fields": ["title^3", "description", "outline"] } }],
          "filter": [
            { "terms": { "category.keyword": ["数据科学", "数据工程"] } },
            { "range": { "price": { "gte": 10000, "lte": 50000 } } },
            { "term": { "difficulty": "中级" } }
          ]
        }
      },
      "functions": [
        { "field_value_factor": { "field": "enrollment_count", "factor": 0.1, "modifier": "log1p", "missing": 0 }, "weight": 1.5 },
        { "field_value_factor": { "field": "rating", "factor": 1, "modifier": "none", "missing": 1 }, "weight": 2 }
      ],
      "score_mode": "sum",
      "boost_mode": "multiply"
    }
  }
}

第三步:聚合分析

POST /courses/_search
{
  "size": 0,
  "aggs": {
    "by_category": {
      "terms": { "field": "category.keyword", "size": 10 },
      "aggs": {
        "avg_price": { "avg": { "field": "price" } },
        "avg_rating": { "avg": { "field": "rating" } },
        "total_enrollment": { "sum": { "field": "enrollment_count" } }
      }
    }
  }
}

小结

本实战案例覆盖了 Elasticsearch 完整技术栈:Mapping 设计(中文分词 + keyword 子字段 + norms 优化)→ 数据写入(Bulk API)→ 搜索查询(multi_match + bool + function_score)→ 聚合分析(嵌套 terms + avg)→ 运维部署(ILM + 监控)。核心心得:Mapping 设计决定搜索质量上限,function_score 让业务规则融入排序,ILM 让运维自动化。

下一页
Elasticsearch 面试考点精选