倒排索引
倒排索引的组成
倒排索引主要由两部分组成:
- 词项词典(Term Dictionary) :它保存了所有文档集合中出现的词项,并为每个词项提供一个唯一标识(词项ID)。这个词典通常按照词项的字母顺序组织。
- 倒排列表(Posting List) :对于词典中的每个词项,倒排列表记录了包含该词项的所有文档的文档ID及其在文档中的位置信息。位置信息可以是词项在文档中出现的次数、位置偏移量等。
倒排索引的构建过程
- 先把文档内容进行分词,形成词条与文档ID的对应关系,叫做词条库,词条具备唯一性,建立索引
- 对搜索内容进行分词,把分词后得到一个关键词列表,根据关键词去词条库中匹配,再找到对应的文档ID列表
3. 然后根据文档ID列表,找到对应的文档信息
倒排索引的查询过程
当用户提交一个查询请求时,搜索引擎会执行以下步骤:
- 查询处理:将用户的查询分解成一系列的词项。
- 检索倒排列表:对于查询中的每个词项,检索倒排列表以找到包含该词项的所有文档。
- 合并结果:使用布尔运算(如AND、OR、NOT)合并各个词项的检索结果,得到最终的文档列表。
- 排名:根据相关性评分算法(如TF-IDF、BM25、向量空间模型等)对结果进行排序,返回最相关的文档。
分词器
ES默认英文是一个单词一个词,中文是一个汉字一个词
需要安装中文分词器【有很多】
IK分词器:可以进行扩展词,也可以进行停用词
ik_smart:粗粒度切分,分出来的词少
ik_max_word:细粒度切分,分出来的词多
倒排索引:
-
优点:
- 根据词条搜索、模糊搜索时,速度非常快
-
缺点:
- 只能给词条创建索引,而不是字段
- 无法根据字段做排序
ES相关概念对比MySQL
Elasticsearch与MySQL的概念对比
| MySQL | Elasticsearch | ES描述 |
|---|---|---|
| Table | Index | 索引 |
| Row | Document | 文档【json】 |
| Column | Filed | 字段【域】 |
| Schema | Mapping | 映射【结构】 |
| SQL | DSL | 语句 |