Solr--全文索引原理

在一些大型的门户网站和电商网站中,都有自己的站内搜索,但是使用传统的数据库查询方式已经无法满足一些高级的搜索要求,比如说:搜索速度要快、搜索结果要按照相关度排序,搜索的内容格式不固定,这些都需要使用全文实现搜索功能。

什么是全文搜索?


  • 信息检索 我们先要知道信息检索:从信息集合中找出与用户需求相关的信息,检索的信息包括:文本,图像,音频,视频等信息。而全文检索是信息检索其中的一类。

全文检索:是计算机索引程序扫描文章中的每一个词,对每一个词都建立索引,指明该词在文章中出现的次数和位置,当用户查询时,检索程序就根据事先建立的检索进行查找,并将查找结果返回给用户。 数据检索:例如,数据均按”时间、人物、地点、事件”的形式存储,查询可以为地点=“北京”,数据检索的性能取决于所使用的标识字段的方法和用户对这种方法的理解,有很大的局限性。

  • 全文检索 举个栗子:当我们去图书馆借书的时候,肯定不会说是去一本一本你的去翻看然后找自己感兴趣的书籍,我的天哪,这得找到猴年马月。

所以我们进图书馆的时候一般都会先去查阅数据的索引卡,或者索引标志,找到相应的书籍;所以当一本书进入图书馆之后,最重要的就是建立索引卡,同样,对于我们所拥有的信息,也需要建立索引。 建立索引,就是对待搜索的信息进行一定的分析,并将分析结果按照一定的组织方式存储起来,通常将这些结果存储在文件中。存储分析结果的文件的集合就是索引。在查询时,先从索引中查找,由于索引是有一定的结构组织的,所以查询的速度非常快。

上图就是建立索引的过程,先对信息进行采集(如果信息检索系统在用户发出检索请求后再去互联网上找答案,根本无法再有限的时间返回结果),然后对信息进行加工,建立索引。在Internet上采集信息的软件被称为爬虫或者蜘蛛或者网络机器人。爬虫在Internet上访问每一个网页,没访问一个网页就把其中的内容传回本地服务器。爬虫的原理可以去看看这篇文章网络爬虫基本原理(一)

倒排索引结构


一开始有点蒙,倒排序怎么个倒排序,那正排序又是什么?后来在网上找到一篇文章,正排索引和倒排索引

正排索引

主要的意思就是说,当网络爬虫在Internet上收集信息的时候,会把收集到的网页进行处理,就是把对网页的内容进行分词(关键词),可以看成这样:

网页

关键词

网页A=

关键词1+关键词2+关键词3+关键词4+关键词5+关键词6+关键词7+…….

网页B=

关键词1+关键词2+关键词3+关键词4+关键词5+关键词6+关键词7+…….

网页C=

关键词1+关键词2+关键词3+关键词4+关键词5+关键词6+关键词7+…….

具体怎么分词大家可以去了解了解分词器,中文的分词和英文的分词是不一样的。原理如下:

正如上面的这个过程,把一个网页分成一个个的关键词的过程就是一个正排索引的过程。

倒排索引

用户查信息的时候,一般都是通过关键词来查询相应的信息。

倒排索引是这样的,倒排索引这个关键词之后跟了一堆网页。

关键词

网页

关键词1=

网页A+网页B+网页C+网页O+…….

关键词2=

网页B+网页P+网页Z+…….

关键词3=

网页D+网页T+网页Y+网页Z+…..

而solr就是一个基于Lucene的Java全文搜索引擎服务器。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏ImportSource

微服务业务开发三个难题-拆分、事务、查询(上)

微服务架构变得越来越流行了。它是模块化的一种方法。它把一整块应用拆分成一个个服务。它让团队在开发大型复杂的应用时更快地交付出高质量的软件。团队成员们可以轻松地...

5879
来自专栏资深Tester

谁说软件测试简单了?

2206
来自专栏数据和云

【云和恩墨大讲堂】玩转AWR裸数据(下)

讲师简介: ? 罗海雄 云和恩墨性能优化总监 ITPUB论坛数据库管理版版主,2012 ITPUB全国SQL大赛冠军得主,他还是资深的架构师和性能优化专家,对 ...

2923
来自专栏CSDN技术头条

如果使用得当,MySQL也可以化身NoSQL

随着互联网和移动互联网的发展,各个机构都需要支撑远超过以往的数据。而在这个需求的刺激下,IT领域出现了大量数据处理技术,其中之一就是NoSQL。灵活的数据类型,...

1885
来自专栏杨建荣的学习笔记

一个复杂的数据需求的创新优化(r12笔记第96天))

今天处理了一个蛮有意思的案例,正如我给开发同学所说的那样,方案有很多,但是我们需要明确需求之后,找到一个最合适的需求。 业务同学反馈,数据库中有...

3396
来自专栏数据和云

MySQL vs Postgre SQL: 5个你最关注的非技术维度的区别

开源数据库中有一堆冤家,我想大家都知道,那就是MySQL与Postgre SQL。两个派系的恩怨情仇从何而来,今天我们将从非技术的角度来进行分析。 本文仅代表个...

3497
来自专栏后端技术探索

世界级的开源项目:TiDB 如何重新定义下一代关系型数据库

众所周知,在 SQL 方面处于顶级的有两个公司,一个是 Oracle,他们已经积累了大量的经验,另一个是谷歌,谷歌 F1 在2012年发布了一篇论文,个人认为它...

1063
来自专栏黄Java的地盘

[翻译]WebSocket协议——摘要

本系列内容为RFC6455 WebSocket协议的中文翻译版。进行相关文档规范的翻译初衷是为了更加深刻的了解WebSocket以及相关内容。

961
来自专栏牛客网

Java面经:有赞offer之路 - 5轮面试的考验

一面 (电面 45min)   Hashmap 是线程安全的吗?Hashtable为什么是线程安全的?      ConcurrentHashmap怎么保证...

6314
来自专栏一名叫大蕉的程序员

一场关于逻辑应该写在哪里的争论No.93

先说结论,我支持将逻辑写在 Java 等应用系统中。 观察了一下,传统企业以及绝大部分转型中的企业的 Java 应用中,很神奇的是,他们的开发人员包括我自己以...

5348

扫码关注云+社区