参考资料:
https://blog.csdn.net/lihang_1994/article/details/72599449
https://blog.csdn.net/luo609630199/article/details/82494708
https://blog.csdn.net/weixin_42182488/article/details/80780708
https://blog.csdn.net/abcwanglinyong/article/details/81031369
什么叫倒排索引
从文档中映射到单词是正排索引,而从单词对应到文档则是倒排索引,又称倒排索引。
- 正排索引是从关键点出发,然后再通过关键点找到关键点代表的信息中能够满足搜索条件的特定信息,既通过KEY寻找VALUE
- Lucene搜索则是采用了倒排索引的方式,即通过VALUE找KEY。而在中文全文搜索中VALUE就是我们要搜索的单词,存放所有单词的地方叫词典,KEY是文档标号列表
Solr优势
Solr是一个开源搜索平台,用于构建搜索应用程序。 它建立在Lucene(全文搜索引擎)之上。 Solr是企业级的,快速的和高度可扩展的。 使用Solr构建的应用程序非常复杂,可提供高性能
优势:
-
solr本身也可以看成数据库,(no sql类型),但它比数据库搜索速度更快,所以在项目中我们一般把搜索部分交给solr,就像我们在京东首页所看到的商品信息,并不是来自数据库,而是来源于sorl的索引库
-
数据库本身不能实现分词效果,而只能使用模糊查询,但是模糊查询非常低效,查询速度比较慢,由于在实际生活中,一般搜索是用的比较多的,这样数据库压力自然就很大,所以我们就让供专业的solr来做搜索功能
Solr的搜索过程
- 1.用户输入搜索条件
- 2.对搜索条件进行分词处理
- 3.根据分词的结果查找索引
- 4.根据索引找到文档ID列表
- 5.根据文档ID列表找到具体的文档,根据出现的频次等计算权重,最后将文档列表按照权重排序返回
举例:
文档一:solr是基于Lucene开发的企业级搜索引擎技术
文档二:Solr是一个独立的企业级搜索应用服务器,Solr是一个高性能,基于Lucene的全文搜索服务器
首先经过分词器分词,solr会为分词后的结果(词典)创建索引,然后将索引和文档id列表对应起来,如下图所示:
solr内部会对分词的结果做如下处理:
- 1.去除停词和标点符号,例如英文的this,that等, 中文的"的","一"等没有特殊含义的词
- 2.会将所有的大写英文字母转换成小写,方便统一创建索引和搜索索引
- 3.将复数形式转为单数形式,比如students转为student,也是方便统一创建索引和搜索索引