Solr(一) Solr 简介及搜索原理

一、 Solr 简介

1 为什么使用 Solr

在海量数据下,对 MySQL 或 Oracle 进行模糊查询或条件查询的效率是很低的。而搜索功能在绝大多数项目中都是必须的,如何提升搜索效率是很多互联网项目必须要考虑的问题。

既然使用关系型数据库进行搜索效率比较低,最直接的解决方案就是使用专用搜索工具进行搜索,从而提升搜索效率。

2 常见搜索解决方案

基于 Apache Lucene(全文检索工具库)实现搜索。但是 Lucene 的使用对于绝大多数的程序员都是“噩梦级”的。

基于谷歌 API 实现搜索。

基于百度 API 实现搜索。

3 Solr 简介

Solr 是基于 Apache Lucene 构建的用于搜索和分析的开源解决方案。可提供可扩展索引、搜索功能、高亮显示和文字解析功能。

Solr 本质就是一个 Java web 项目,且内嵌了 Jetty 服务器,所以安装起来非常方便。客户端操作 Solr 的过程和平时我们所写项目一样,就是请求 Solr 中控制器,处理完数据后把结果响应给客户端。

4 正向索引和反向索引

只要讨论搜索就不得不提的两个概念:正向索引(forward index)和反向索引(inverted index)。

正向索引:从文档内容到词组的过程。每次搜索的时候需要搜索所有文档,每个文档比较搜索条件和词组。

文档 词组
I am a chinese I,am,a,chinses

反向索引:是正向索引的逆向。建立词组和文档的映射关系。通过找到词组就能找到文档内容。(和新华字典找字很像)

词组 文档
I,am,a,chinses I am a chinese

二、 Solr 搜索原理

1 搜索原理

Solr 能够提升检索效率的主要原因就是分词和索引(反向索引)。

分词:会对搜索条件/存储内容进行分词,分成日常所使用的词语。

索引:存储在 Solr 中内容会按照程序员的要求来是否建立索引。如果要求建立索引会把存储内容中关键字(分词)建立索引。

Solr(一) Solr 简介及搜索原理

2 Solr 中数据存储说明

Solr 为了给内容建立索引,所以 Solr 就必须具备数据存储能力。所有需要被搜索的内容都需要存储在 Solr 中,在开发中需要把数据库中数据添加到 Solr 中进行初始化,每次修改数据库中数据还需要同步 Solr 中的数据。

Solr 中数据存储是存储在 Document 对象中,对象中可以包含的属性和属性类型都定义在 schema.xml 中。如果需要自定义属性或自定义属性类型都需要修改 schema.xml 配置文件。从 Solr5 开始 schema.xml 更改名称为 managed-schema(没有扩展名)