全文检索系统技术架构及流程说明

技术架构图

这里写图片描述

索引的创建

根据文件来源,分为hadoop数据和oarcle数据两类。
(1) hadoop数据
在线网盘的文本文件和非文本文件都保存在hadoop的hdfs或hbase数据表中,推荐系统的网页文件也保存在hbase表中。这些文件通过tika、Jsoup等文本提取或文本解析工具将文件名、文本内容、网页文字内容等可索引数据解析出来保存在hbase表的对应字段中,然后通过ES-Hadoop,利用hive、spark大数据处理工具与elasticsearch协同工作,快速建立索引。
在线网盘上传的新数据以及爬虫爬取的推荐网页数据会先进行解析,分别保存在hbase中和kafka中。
索引更新程序从kafka中读取数据进行更新。
(2) Oracle数据
信息化系统的结构化数据保存在oracle数据表中。这类数据直接使用java编写程序读取oracle数据,然后使用elasticsearch的API建立索引。
提供新建oracle表索引、更新表索引、删除表索引接口,可在web端调用接口对oracle表的索引进行管理。
Oracle数据的索引自动更新采用定时任务进行。

索引的查询

文档:创建索引时,作为整体的某篇文章、某个网页的所有内容建立为一个索引文档。
字段:一个索引文档可能包括多个字段,比如网盘文件的索引文档包括文件名、上传人、所在单位、摘要、正文、所属类别等字段。创建索引时,会将每个字段分词,再根据词建立索引。
词条:搜索框里输入的要查询的内容,可能是一个词,也可能是多个词组成的短语。搜索时,会将词条先进行分词。
(1) 基本搜索
根据数据内容的不同和创建索引时索引策略设计的不同,提供不同的搜索策略。
- 最佳字段匹配搜索:在一个字段中匹配了最多分词的查询子句占分值最大,然后将所有匹配字段的查询子句分值加和,除以查询子句数目,得到综合得分。结果就是哪个文档中包含查询的分词的字段数多,哪个的最终分值高。如果某个文档中的一个字段包含了最匹配的全部词条,而其它字段没有跟词条匹配的词;而另一个文档每个字段都包含了搜索词条的某一个词,则该文档比前一个文档的得分高。而我们实际想要的结果可能是最匹配全部词条的文档。
- 交叉字段匹配搜索:会解析查询字符串来得到一个词条列表,然后将所有的字段视为一个大的字段,然后在任一字段中搜索每个词条。这种方式还能够在查询期间对个别字段进行提升,也就是让某个字段有匹配内容时的权值比别的字段高。
- 自身投票字段提升搜索:为文档定义一个权值字段,比如当文档被浏览次数多时,该文档的权值就高。然后在搜索时使用文档的权值字段的值,根据预设的函数来改变搜索结果的评分。
- 短语查询调整分值搜索:首先解析查询字符串来产生一个词条列表。然后会搜索所有的词条,但只保留含有了所有搜索词条的文档,并且词条的位置要邻接。可以设定词之间最大相隔多远算邻接。
- 使用关联词解析器搜索:在创建索引时,将两个相邻的词(或多个相邻的词)组合成一个作为关联词创建索引。这种方法不仅比短语查询更灵活,它们的性能也更好。相比每次搜索需要为短语查询付出的代价,该查询和简单match查询一样的高效。只是在索引期间会付出一点小代价,因为更多的词条需要被索引,意味着使用了该解析器的字段也会占用更多的磁盘空间。但是,多数应用是写入一次读取多次的,因此在索引期间花费一点代价来让查询更迅速是有意义的。

(2) 拼音搜索
对所有索引文档内容的分词结果,按照词频建立热词列表,并为热词列表建立拼音索引。在使用拼音搜索时,拼音对应的汉字词从热词索引中得出前n个,并按词频排序,显示在下拉框中供用户选择。
有新数据进行索引更新的同时,更新热词列表和热词拼音索引。
(3) 搜索词语联想
保存所有曾经搜索过的词(短语),为这些搜索词语建立分词索引和拼音索引,同时为它们建立边缘ngrams索引(比如:对“中华人民共和国”这个词,分别为“中”、“中华”、“中华人”、“中华人民”、“中华人民共”、“中华人民共和”、“中华人民共和国”建索引)。
对搜索框中输入的汉字或拼音,每输入一个字或字母,就在上面方式建立的索引中搜索最匹配的前n个返回,显示在下拉框中选择。
有新搜索词语时,添加到搜索词语列表并更新搜索词语的分词索引、拼音索引及边缘ngrams索引。
(4) 即时搜索
以上几种搜索,都是在用户输入完所有想要搜索的词语,敲回车或从下拉框中选择确认后,再像后台提交请求,获取搜索结果。即时搜索实现的是,用户每输入一个字或一个字母,假如停留时间超过阈值,则自动向后台提交搜索请求并返回结果,且光标继续停留在输入框的当前位置。假如结果不符合用户需求,则可以继续输入搜索内容。
对于有拼音搜索和搜索词语联想,都是进行的即时搜索以获取推荐词语列表,并且自动将列表中第一个词语直接搜索并显示结果,不需要等待用户敲回车确认后再进行。

索引的备份

启动定时任务,定期将所有索引备份到hadoop-hdfs中。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值