Elasticsearch 文本搜索与索引管理全解析(上)
在全文搜索领域,让文本能够被高效搜索是首要解决的问题。传统数据库在处理全文搜索时存在不足,因为它们每个字段通常只存储单一值,而全文搜索要求文本字段中的每个单词都能被搜索到。这意味着数据库需要能够在单个字段中对多个值(即单词)进行索引。
1. 倒排索引:解决文本搜索的关键
倒排索引是最能满足每个字段多值需求的数据结构。它包含一个所有文档中出现的唯一值(术语)的排序列表,并且对于每个术语,都有一个包含该术语的所有文档的列表。以下是一个简单的倒排索引示例:
| Term | Doc 1 | Doc 2 | Doc 3 | … |
| — | — | — | — | — |
| brown | X | | X | … |
| fox | X | X | X | … |
| quick | X | X | | … |
| the | X | | X | … |
在 Elasticsearch 中,文档是具有字段和值的结构化 JSON 文档,实际上,JSON 文档中的每个索引字段都有自己的倒排索引。倒排索引不仅记录包含某个术语的文档列表,还可能存储许多其他信息,如包含每个术语的文档数量、术语在特定文档中出现的次数、每个文档中术语的顺序、每个文档的长度以及所有文档的平均长度等。这些统计信息有助于 Elasticsearch 确定哪些术语和文档更为重要。
早期的全文搜索会为整个文档集合构建一个大型倒排索引并写入磁盘,新索引准备好后会替换旧索引,从而使最近的更改可被搜索。
2. 倒排索引的不可变性
写入磁盘的倒排索引
超级会员免费看
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



