一、背景
在ElasticSearch中,通过关键字/关键词去查找对应文本的过程,是由全文检索引擎实现的。
全文检索引擎就是对非结构化文本进行解析、搜索的技术,而非结构化文本的处理关键在于分词与倒排索引。
二、什么是倒排索引?
在ElasticSearch中,倒排索引是一种常用的数据结构,用于快速检索文档中的某个词汇。
在传统的索引结构中,是通过哈希表或B+树的数据结构来实现的,存储的是文档ID与对应文档的映射。而在倒排索引中,存储的是关键词与对应文档ID的映射,所以可以快速定位到包含指定关键词的文档列表。
传统索引结构:
ID | 文档 |
---|---|
1 | 深入理解Java虚拟机 |
2 | Java编程思想 |
倒排索引结构:
关键词 | 文档ID |
---|---|
深入 | 1 |
理解 | 1 |
Java | 1,2 |
虚拟机 | 1 |
编程 | 2 |
思想 | 2 |
三、怎么使用倒排索引?
1、分词
分词指的是将文档中的原始文本拆分成一个个词项,在ElasticSearch中默认使用标准分词器(Standard Analyzer)进行分析。如"深入理解Java虚拟机"
在经过分词之后就会拆分成["深入","理解","Java","虚拟机"]
2、排序
排序指的是搜索结果中会根据每个文档不同得分进行排序,一般会根据相似度算法(TF-IDF和BM25)进行算分。
得分排序规则:
- 优先按得分排序,得分高的排前面
- 得分相同的按文档长度排序,文档短的排前面
- …