Solr是什么and做什么

本文用于介绍 solr 应用场景和原理

NONGFAH 写于 2019-05-16

因为公司项目需要,接触了 solr 全文搜索引擎,简单了解后发现网上大部分资料都比较过时,在此总结归纳一下学习资料及经验。

solr

是什么

solr 是 Java 编写的,运行于 servlet 容器中的全文检索服务器。

做什么

solr 用于全文检索。

全文检索是什么

在生活中,我们接触到的数据主要分为两类

  • 结构化数据 : 数据库等存储的、经过加工的数据;有固定字段或格式。
  • 非结构化数据 : 没有固定字段或格式、没有经过加工的数据。如 word 文档等

非结构化数据也被叫做 全文数据 ,它所有的数据都是一个整体,对非结构化数据的操作只能基于全文进行。

举例来说,如果我们得到《西游记》《红楼梦》《三国演义》《水浒传》几本书,需要统计”石头“出现在哪些书中。由于这几本书是非结构化数据,我们只能通过遍历所有的书才能找到我们需要的数据。 但当我们再次需要统计”石头“出现的位置时,我们仍需再次扫描全文。这显然是十分耗时耗力的。为此,我们可以将第一次统计的结果保存起来,这样当我们下次在进行搜索(注意不是检索),直接使用上次的结果,使用空间换取了时间。但是这还是存在问题,当我需要统计“劳什子”出现的位置时,我还得去扫描一遍,聪明的你很容易想到,此时我们再将”劳什子“存储起来不就行了吗。行是行,但是这是有问题的。

上述过程存在两个致命的缺点

  1. 索引是在我第一次搜索时建立的,这意味着我第一次搜索时可能需要耗费很长时间。
  2. 每次只为一个词建立索引,导致需要遍历全文很多次,严重浪费性能。

这两个问题是一个全文检索服务器的核心问题,即什么时候建立索引如何建立索引。当然,第一个问题的答案是显而易见的,我们当然要在搜索前建立索引已加快搜索速度。

在继续讨论 solr 如何建立索引之前,我们总结一下已有的进度。 我们有四本书,想要搜索书中内容,第一次搜索后,我们将结果保存起来,这个搜索结果我们称之为索引。 将非结构化数据进行结构化即为数据建立索引,当需要搜索数据时,我们不去遍历全文,而是对索引进行查找。 虽然建立和查找索引也会耗费时间,但当数据量较大时,查找索引比查找全文快的多得多,并且只需要建立一次索引,便能够重复使用的,这更能加快整体处理速度。 这种为非结构化数据建立索引、基于索引进行搜索的技术就是全文检索技术。

solr如何建立索引

建立索引的一个问题是索引里边究竟存储什么,索引有两个要求:在保持精简的前提下,能够不重复并且全面的包含尽可能多的关键信息,这读起来可能像个互斥命题,庆幸的是你不需要证明你妈是你妈。 我们不在乎索引能否逆向回具体文章,允许丢弃部分不重要的数据来加快搜索进度(下边会介绍丢弃的这部分数据)在上边的例子中,我们在书中搜索“石头”这个词,