一、作用
全文搜索算法适合文本文件的搜索。
二、应用场景
全文搜索算法广泛应用在各个网站的搜索功能中。
三、全文搜索和正则模糊查询的区别
1、全文搜索可以把搜索关键字进行分割,提取出相关的关键词。
2、正则模糊查询只能把关键字作为整体,不能分割词汇。
四、全文搜索的思路
(一)把被查询的文本文件建立索引库
1、在磁盘中确定一个文件作为索引文件。
索引文件的格式自定义,方便进行查询。
2、索引文件的作用:
建立关键字和文件路径、出现位置的对应关系。
假设词汇“漂亮” 出现在文本文件 《我的对象》中,那么这个词汇在索引中的记录内容是:
漂亮 : 《我的对象》文件存放路径 : 出现的起始字节位置
3、如何确定索引文件的内容?
3.1、按照顺序读取文本文件的字符,按照分词规则忽略无用词汇,提取关键词汇。
3.2、给每个关键词汇存入一个索引到索引文件里。
(二)开发网络接口给外部查询
1、提供HTTP接口给外部查询
2、查询思路:
用户输入查询关键字,提交给后台。
后台获取关键字,开始分词。
把词汇到索引文件中查询。
如果词汇出现在索引文件中,返回文件的路径和坐标。
后台把该文件内容返回(把目标词汇高亮显示)。
五、关键思路
(一)如何分词
1、建立忽略词汇表
把那些代词、介词、标点符号组成一个忽略表,用来忽略不计。
例如 我、我们、的、地、你、了
忽略标点符号: 、;,!?。
2、建立关键词汇表
需要用户不断的录入词汇,方便查询。
把汉语的词汇都录进去,例如:目录、模型、关键、物质、组织、基础、训练、右击、考试、老师等。
3、把文字序列进行分词
从最左边开始,判断每一个字符:
如果在忽略词汇表中,就忽略该词汇,读取下一个字符。
如果在关键词汇表的词汇中,有词汇的第一个词和该词汇相等,那么读取下一个字符是否匹配第二个字符。
例如当前字符是‘礼’,在关键词汇表中有 ‘礼仪’这个词汇的第一个词汇和它相等,那么读取第二个字符是否等于‘仪’。
注意:可能只有匹配一个字符也满足。
4、如果查询序列和关键词汇表有相等的,就获取索引文件中出现过的文件。
(二)索引文件如何建立
采用二进制格式,每条记录连续存放。
单条记录格式:20字节关键字 50字节相关文件路径 4字节出现的起始索引位置
六、通俗介绍
(一)被搜索的文本文件通过分词操作,建立索引。
(二)用户提交关键句进行查询,后台根据关键句子也进行分词操作,从索引文件中找到关键字相等的那些文件路径,把文件内容返回给用户。
案例:
1、搜索时有一句话: 我的未来不是梦。
2、分词后忽略: 我 的 。
3、分词后获得的关键字:未来 不是 是梦 梦
4、把未来、不是、是梦、梦这四个关键字去索引文件里查询,如果存在就返回对应的文件路径。
5、假设找到以下文件路径(这些文件内容中出现过关键字):
/doc/关于未来的演讲.html
/doc/我的未来生活.txt
/doc/我做了一个梦.doc
6、把这些文件路径代表的文件读取,用内容列表返回给用户。