跳到正文
Elaine Blog
返回

搜索系统与 Elasticsearch 基础模型

Elasticsearch 与搜索架构

Elasticsearch 不是把 SQL 换成 JSON,而是以文档为读写单位、用倒排索引按词找文档的分布式搜索引擎。读完本篇,你能解释一条文本怎样被索引,以及查询为什么不需要逐行扫描。

Table of contents

Open Table of contents

从正排变成倒排

正排数据回答“文档 42 有哪些字段”;倒排索引回答“包含 java 的文档有哪些”。索引时,分析器把标题规范化并切成词项(term),系统为每个词项记录文档集合、出现次数和位置等信息。

p-1: Java 架构设计  ┐
p-2: Java 入门      ├─> java -> [p-1, p-2]
p-3: 搜索实战       ┘   搜索 -> [p-3]

文档(document)是一条 JSON 记录,字段(field)是记录中的属性,索引(index)是一组结构相近的文档。不要把这里的 index 与 MySQL 二级索引混为一谈。

分片和副本做什么

主分片把一个索引水平切成多份,使数据与查询可以分布到多个节点。副本是主分片的复制品,用于容错并可承担搜索读取。一次搜索通常由协调节点把请求发到相关分片,再归并各分片的候选结果。

分片不是越多越好。每个分片都需要文件、堆元数据、线程和恢复工作;分片过少又可能让单个分片过大、恢复过慢。创建索引前要先估算数据量、写入率、查询并发与故障恢复时间。

运行第一个搜索

进入搜索架构实验室下载,运行:

mvn -Dtest=SearchArchitectureTest#invertedIndexFindsDocumentsAndFilterDoesNotChangeScore test

测试把三个商品写入内存倒排索引,查询 Java 后只保留 book 分类。它用于观察原理,不代替 Lucene 或 Elasticsearch。

搜索系统通常是数据库的派生视图:MySQL 保存交易真相,Elasticsearch 提供检索。这个边界决定后续必须设计同步、重建和校验。

下一步

继续阅读09-02 Elasticsearch、Kibana、安全与索引生命周期,搭建可观察的本地环境。


分享这篇文章:

上一篇
Redis 生产变更与数据迁移
下一篇
Elasticsearch、Kibana、安全与索引生命周期