Solr基本面试问题

solr是什么?有什么优点?

Solr是Lucene面向企业搜索应用的扩展

基于Lucene的全文搜索服务器。同时对其进行了扩展,提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展并对查询性能进行了优化,并且提供了一个完善的功能管理界面,是一款非常优秀的全文搜索引擎

Lucene是什么?

Lucene 是一个基于 Java 的全文信息检索工具包,目前主流的搜索系统Elasticsearch和solr都是基于lucene的索引和搜索能力进行。

Solr和Lucene的区别?

Lucene是一个基于Java的全文信息检索工具包,局限于Java调用,而Solr底层的核心技术是使用Lucene来实现的,是一个跨平台的搜索应用,而且提供了一个HTTP的管理页面。

Lucene 实现全文检索的流程?

  1. 创建索引的过程:确定要搜索的内容—>构建文档对象—>分析文档(分词)—>创建索引
  2. 搜索过程:用户通过搜索界面—>创建查询—>执行搜索,从索引库搜索—>渲染搜索结果


什么是全文检索?

数据总体分为两类:结构化数据和非结构化数据。

  • 结构化数据:指具有固定格式或有限长度的数据,如数据库,元数据等。
  • 非结构化数据:指不定长或无固定格式的数据。非结构化数据又一种叫法叫全文数据。

对结构化数据的搜索:如对数据库的搜索,用SQL语句。再如对元数据的搜索,如利用windows搜索对文件名,类型,修改时间进行搜索等。

对非结构化数据的搜索:如利用windows的搜索也可以搜索文件内容,Linux下的grep命令,再如用Google和百度可以搜索大量内容数据。

*全文检索:即先建立索引,再对索引进行搜索。索引是从非结构化数据中提取出之后重新组织的信息。

倒排索引和常规索引?

常规索引

文档——>关键词 但是这样检索关键词的时候很费力,要一个文档一个文档的遍历一遍。

倒排索引:倒排索引是关键词到文档的映射

关键词——>文档 这样,只要有关键词,立马就能找到她在那个文档里出现过,然后就可以查出整个文档。

中文分析器 IK Analyzer

IK Analyzer 是一个开源的,基亍 java 语言开发的轻量级的中文分词工具包。可以自己添加扩展词典和停用词典。

配置域

域相当于数据库的字段

域的常用属性:

  • name:指定域的名称
  • type:指定域的类型
  • indexed:是否索引
  • stored:是否存储
  • required:是否必须
  • multiValued:是否多值

我们根据自己的需求自定义域,例如:id,标题,价格,品牌,商家名称,分类名称,商品的SKU的ID,图片地址等。

复制域

复制域的作用在于将某一个 Field 中的数据复制到另一个域中,就是说可以将域进行组合

我们把标题、品牌、分类名称、商品放进复制域中,用来后续的组合查询

注意:复制域不需要存储,只是逻辑上进行组合,属性就选择Ik分词器,需要建立索引搜索

动态域

将两个域的域名复制到一个text文本域中。

我们数据库中的规格字段,存储的是动态的值,不固定的,需要动态拼接,在末尾+*号表示。

Spring Data Solr简介

Spring Data Solr 就是为了方便 Solr 的开发所研制的一个框架,其底层是对 SolrJ(官方 API)的封装。

我们为什么要使用Solr来进行查询:

- 数据库中不能分词
- 在数据库中我们只能使用Like来模糊搜索,太低效,太慢
- 在电商项目中,使用搜索会承担很大的压力,每一个人过来搜一下,数据库扛不住压力

所以我们需要使用更专业的工具来实现搜索功能,我们要把数据库中的内容导入到Solr的索引库中,并且要随着数据库中的变化而变化

批量数据导入

思路:通过Mybatis来查询数据库中的数据,在调用批量添加的方法到Solr索引库

SolrCloud

当处理数据量大,并发量高的搜索的时候,一个solr服务是不可能满足要求的,所以此时需要SolrCloud来解决,solr本身是不支持分布式的,所以使用的是第三方依赖 zookeeper+solr来实现的。

Zookeeper 作为集群的配置信息中心。

它有几个特色功能:

1)集中式的配置信息

2)自动容错

3)近实时搜索

4)查询时自动负载均衡


Solrcloud的结构

solrcloud为了降低单机的处理压力,需要由多台服务器共同来完成索引和搜索任务。实现的思路是将索引数据进行Shard分片每个分片由多台服务器共同完成,当一个索引或搜索请求过来时会分别从不同的Shard的服务器中操作索引

solrcloud是基于solr和zookeeper部署,zookeeper是一个集群管理软件,solrcloud需要由多台solr服务器组成,然后由zookeeper来进行协调管理。


总结:

一个solrcloud集群从架构方面来讲分成物理结构和逻辑结构进行理解.

物理结构:

一个solrcloud集群,由多台solr服务器(安装了solr对应的tomcat服务器的邮件服务器)组成,每一台solr服务器又是可以安装多个tomcat,每个tomcat中安装一个solr.war.每个solr.war对应一个solrhome,每个solrhome只需要配置一个solrcore.

逻辑结构:

一个solrcloud从逻辑上可以看成是一个collection(索引集合).一个collection可以从逻辑上被分为多个片shard,每个片又可以由多个solrcore组成,一个片的多个solrcore需要有一个master,其他的都是slave.

Solrcloud架构的优势:

1、solrcloud集群中使用分片的架构,每片提供搜索和索引的内容是不一样的。这样架构的好处是可以高扩展。

2、solrcloud集群中同一片由不同的solrcore组成,这样如果一台solrcore失败,是不会影响使用,这样就解决了高可用。而且还可以解决高并发。

物理结构

从物理结构来看,solrcloud需要三台solr服务器,每台服务器包括两个solrcore实例,共同组成一个solrcloud。

逻辑结构

从逻辑结构来说,整个solrcloud就看成一个大的solrcore,也就是一个collection。而一个collection被分成两个shard分片(shard1和shard2)。

shard1和shard2又分别由三个oslrcore组成,其中一个Leader两个Replication。Leader是由zookeeper选举产生,zookeeper控制每个shard上三个Core的索引数据一致,解决高可用问题。

用户发起索引请求分别从shard1和shard2上获取,解决高并发问题。



Collection:Collection在Solrcloud集群中是一个逻辑意义上的完整的索引结构。它常常被划分为一个或多个shard分片,这些shard分片使用相同的配置信息。

Shard:Shard是Collection的逻辑分片。每个Shard被化成一个或者多个replication,通过选举确定哪个是Leader。

Core:每个Core都是Solr中一个独立运行单位,提供索引和搜索服务。一个shard需要由一个Core或多个Core组成。由于collection由多个shard组成,一个shard由多个core组成,所以也可以说collection一般由多个core组成。

Master或Slave:Master是master-slave结构中的主结点(通常说主服务器),Slave是master-slave结构中的从结点(通常说从服务器或备服务器)。同一个Shard下master和slave存储的数据是一致的,这是为了达到高可用目的

YuHang-与你:分布式搜索引擎-Elasticsearchzhuanlan.zhihu.com图标YuHang-与你:Elasticsearch和solr的区别zhuanlan.zhihu.com图标

请使用浏览器的分享功能分享到微信等