一:什么是全文检索
我们生活中数据总体分为两种,结构化数据和非结构化数据。
- 结构化数据:指具有固定格式或有限长度的数据,如数据库、元数据等。
- 非结构化数据:指不定长或无固定格式的数据,如互联网数据、邮件、word文档等。非结构化数据又有一种叫法叫全文数据。
二:目前主流的Java全文检索技术
-
lucene:Java语言全局检索技术的底层实现。使用该技术需要对Lucene的API底层原理非常了解,而且需要编写大量的java代码。
-
solr:基于lucene简化开发,提示性能、扩展性。通过solrCloud可以实现分布式搜索。使用Java实现的一个web应用,可以使用rest方式的http请求,进行远程的API调用。
-
ElasticSerach:基于lucene,更倾向于实现实时搜索。可以使用rest方式的http请求,进行远程api的调用。
按照数据的分类,搜索也分为两种: -
对结构化数据的搜索:如对数据库的搜索,用sql语句。如对元数据的搜索,如利用windows搜索。
-
对非结构化的数据搜索:如Google、百度等。
对非结构化数据即全文数据的搜索主要有两种方法:顺序扫描法和反向索引法。
- 顺序扫描法:所谓顺序扫描法,就是顺序扫描每个文档的内容,看看是否有要搜索的关键字,实现查找功能,也就是根据文档找词。
- 反向索引法:所谓反向索引,就是提前将搜索的关键字建成索引,然后在根据索引查找文档,也就是根据词找文档。
这种先建索引,再对索引进行搜索文档的过程就叫全文检索
三:全文检索流程分析
全文检索分为两大流程:创建索引、搜索索引
- 创建索引:将现实世界中所有的结构化和非结构化数据提取信息,创建索引的过程。
- 搜索索引:就是得到用户的查询请求,搜索创建的索引,然后返回结果的过程。
四:创建索引流程
数据库一条记录会存储为一个Document对象,一条记录的一列会存储为一个Field
name相当于数据库的列名,value相当于数据库列的值。不会将数据库的所有数据存储到索引库。