倒排索引,正排索引与lucene
2019-08-04 本文已影响6人
mysia
数据搜索技术
- 传统数据库搜索技术:
select * from TABLE_NAME where xx like "%PHP是世界上最好的语言%"
该查询对于数据库来说,需要根据查询字段逐条进行检索。然后返回该条结果数据,对于大量的数据来说搜索效率很低,而且只能进行完整的匹配。无法模糊搜索。
- 倒排索引数据搜索技术:
网页搜索 PHP是世界上最好的语言
![](https://img.haomeiwen.com/i5490117/bccdd64711d00f39.png)
当前搜索中出现了传统数据库搜索不能出现的php还是世界上..等词。
如果有五条数据,那么它们都是怎么检索的呢?
DocId | 内容 |
---|---|
1 | PHP是世界上最好的语言是什么梗? |
2 | PHP是世界上最好的语言这个梗是怎么来的? |
3 | 编程的程序员们,你们有语言崇拜吗... |
4 | php语言是不是世界上最好的语言 |
5 | 程序员鄙视链PHP是世界上最好的语言 |
如果是传统数据库检索,只会出现 1 , 2 , 4, 5 分词。
DocId | 内容 |
---|---|
1 | PHP,是,世界上,最好,的,语言,是,什么,梗? |
2 | PHP,是,世界,上,最好,的,语言,这个,梗,是,怎么,来,的? |
3 | 编程,的,程序员们,你们,有,语言,崇拜,吗... |
4 | php,语言,是不是,世界,上,最好,的,语言 |
5 | 程序员,鄙视链,PHP,是,世界,上,最好,的,语言 |
按照以上分词的结果,进行查询.依然是正排索引。倒排索引是什么样子的呢?
词 | DocId |
---|---|
PHP | 1,2,3,4,5 |
世界 | 1,2,3,4,5 |
语言 | 1,2,3,4,5 |
程序员 | 5 |
编程 | 3 |
... | ... |
那么基于倒排索引查询的时候就很清晰了,对于分伺后的结果再查询文档。
搜索引擎是如何实现的呢?
基于以上了解的,实现搜索引擎的整体过程是什么流程?
![](https://img.haomeiwen.com/i5490117/20612603c26b4afc.png)
Lucene是什么?
百度百科:Lucene是纯java开发的一个开源的全文检索引擎工具包。它本身不是一个完全的全文检索引擎,而只是一个完全的全文检索引擎架构。它提供了完全的查询引擎与索引引擎。目前由Apache基金会进行运营。再其之上建立的成熟的全文检索引擎有solr与ElasticSearch。
Lucene历史
Lucene最早有Hadoop之父Doug Cutting创建,Doug Cutting是资深全文检索专家,早期发布Lucene代码到个人博客上,最终贡献给Apache基金会。
Lucene基本概念
- Index(索引):索引;
- Segement(段):创建索引时会生成Segment;之后再定时合并到大的Segment中;
- Document(文档):由很多的Field组成;
- Field(字段):有很多的Term组成;
- Term(词项):分词后的最小单元为Term;
- Token(词条):类似于每个Term的属性,记录类型,偏移量等;
![](https://img.haomeiwen.com/i5490117/6c542e36658848f2.png)
完。