0
点赞
收藏
分享

微信扫一扫

面试精选-solr篇

1.什么是Solr

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

2.Elasticsearch 与 Solr 的比较

1.二者安装都很简单;
2.Solr 利用 Zookeeper 进行分布式管理,而 Elasticsearch 自身带有分布式协调管理功能;
3.Solr 支持更多格式的数据,而 Elasticsearch 仅支持json文件格式;
4.Solr 官方提供的功能更多,而 Elasticsearch 本身更注重于核心功能,高级功能多有第三方插件提供;
5.Solr 在传统的搜索应用中表现好于 Elasticsearch,但在处理实时搜索应用时效率明显低于 Elasticsearch。
6.Solr 是传统搜索应用的有力解决方案,但 Elasticsearch 更适用于新兴的实时搜索应用。

3.为什么要配分词

当我们访问购物网站的时候,我们可以根据我们随意所想的内容输入关键字就可以查询出相关的内容,这是怎么做到呢?这些随意的数据不可能是根据数据库的字段查询的,那是怎么查询出来的呢,为什么千奇百怪的关键字都可以查询出来呢?

答案就是全文检索工具的实现,luncence采用了词元匹配和切分词。举个例子:北京天安门------luncence切分词:北京 京天 天安 安门 等等这些分词。所以我们搜索的时候都可以检索到。

有一种分词器就是IKAnalyzer中文分词器,它有细粒度切分和智能切分,即根据某种智能算法。
这就使用Solr的最大的好处:检索功能的实现。

4.IK分词器原理

本质上是词典分词,在内存中初始化一个词典,然后在分词过程中逐个读取字符,和字典中的字符相匹配,把文档中的所有词语拆分出来的过程

5.Solr的索引查询为什么比数据库要快

Solr使用的是Lucene API实现的全文检索。全文检索本质上是查询的索引。而数据库中并不是所有的字段都建立的索引,更何况如果使用like查询时很大的可能是不使用索引,所以使用solr查询时要比查数据库快

6.Solr的使用步骤

使用步骤;

(1)Solr服务器搭建,因为Solr是用java5开发的,所以需要JDK和Tomcat。搭建部署
(2)搭建完成后,我们需要将要展示的字段引入Solr的库中。配置Spring与Solr结合,工程启动的时候启动Solr
(3)将数据库中的查询内容导入到Solr索引库,这里使用的是SpringDataSolr的客户端实现的。具体使用可以参考API
(4)建立搜索服务,供客户端调用。调用Solr,查询内容,这中间有分页功能的实现。Solr高亮显示的实现。
(5)客户端接收页面的请求参数,调用搜索服务,进行搜索。

7.什么是SolrHome

solrhom相当于存放数据的地方,里面一个个文件相当于数据库,每个数据库里面有两个文件夹,一个data,一个conf,conf下有一个schema.xml文件,配置域,相当于表的字段。
solr中内置了许多的字段类型

8.解释一下什么是solrcore?

solrcore就是solr中的一个实例,也就是索引库,一个solr可以有多个solr实例,多个solr实例之间互不干扰

9.解释一下什么是collection

单机版的solr,collection 就是solrcore 是solr的一个实例(索引库)
SolrCloud中: collection是逻辑结构上solrcore 的集合
在SolrCloud集群中逻辑意义上的完整的索引。它常常被划分为一个或多个Shard,它们使用相同的Config Set。如果Shard数超过一个,它就是分布式索引,SolrCloud让你通过Collection名称引用它,而不需要关心分布式检索时需要使用的和Shard相关参数。

10.Solr的域

域的简介:域相当于数据库的表字段,用户存放数据,因此用户根据业务需要去定义相关的 Field
(域),一般来说,每一种对应着一种数据,用户对同一种数据进行相同的操作。

分析根据我们搜索页面的业务域按一下原则进行:

1. 要不要根据此字段进行搜索
2. 此字段结果需不需要显示
3. 用不用的到此字段

满足以上3个条件中的一个,就需要配置为业务:
一般域的配置

<field name="item_goodsid" type="long" indexed="true" stored="true" />

域为item_goodsid我们在使用spring data solr 的时候会用到这个域
type就是指定这个域存放的数据类型
indexed=true就是需要索引

复制域的配置

<field name="item_keywords" type="text_ik" indexed="true" stored="false" multivalued="true"/>
<copyField source="item_title" dest="item_keywords"/>
<copyField source="item_category" dest="item_keywords"/>
<copyField source="item_seller" dest="item_keywords"/>
<copyField source="item_brand" dest="item_keywords"/>

动态域的配置:

<dynamicField name="attr_*" type="string" indexed="true" stored="true" multiValued="true"/>

10.Solr是解决什么问题的?

严格来说,lucene负责数据存储,而solr只是一个引擎提供搜索和插入而已,跟数据库的解释器一样,有什么好处呢,比如一个数据库有一个字段存了1000个字,你想从这些字里面搜一个词的时候,普通的数据库只会让你使用like去查询,他会遍历每个字去模糊匹配,效率很低,而且有些是无法查询的,当然除了像一些特殊的数据库带有分词,比如postgresql,那lucene做的事情就是分词,然后去匹配分词的词中是否有你想搜的词就好了,当然了,为了提高这种检索效率和内存节省底层做了很复杂的事情,可以这么简单的认为,全文搜索这件事情上数据库是无法满足的!

11.Solr的查询

普通域查询
复制域查询
动态域查询
分页查询
分组查询
高亮查询
过滤查询
区间查询
排序查询

12.什么是solrCloud?

SolrCloud(solr 云)是Solr提供的分布式搜索方案,当你需要大规模,容错,分布式索引和检索能力时使用 SolrCloud。当一个系统的索引数据量少的时候是不需要使用SolrCloud的,当索引量很大,搜索请求并发很高,这时需要使用SolrCloud来满足这些需求。

SolrCloud是基于Solr和Zookeeper的分布式搜索方案,它的主要思想是使用Zookeeper作为集群的配置信息中心。

它有几个特色功能:

1)集中式的配置信息
2)自动容错
3)近实时搜索
4)查询时自动负载均衡

13.如何创建solrCloud?

第一步: 搭建zookeeper集群
第二部: 搭建tomcat集群
第三部:配置每个每个solr实例的solrhome
第四部:将solr的配文件上传到zookeeper统一管理
第五步:配置每个solr服务的端口及ip地址
第六步:每一台solr和zookeeper关联
第七部:完成配置启动服务

14.在solrCloud模式下,配置文件保存在哪里?

保存在zookeeper的服务中,可以通过zookeeper的客户端链接查看

15.描述solrCloud的逻辑结构?

面试精选-solr篇_zookeeper
索引集合包括两个Shard(shard1和shard2),shard1和shard2分别由2个Core组成,其中一个Leader两个Replication,Leader是由zookeeper选举产生,zookeeper控制每个shard上2个Core的索引数据一致,解决高可用问题。

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

16.描述solrCloud的物理结构?

三个Solr实例( 每个实例包括两个Core),组成一个SolrCloud。

17.什么是shard的拷贝?

Shard replica(副本),一个shard是由多个副本构成的,注意一个Shard中的replica 包含的内容逻辑上应该是一样的,Shard的数据只是其中一份Replica,不是这些副本的组合。

18.一个shard可以有多少个拷贝?

根据实际的业务需求,最多不超过10个。

19.某一个shard的拷贝中是不是一定有一个拷贝为leader?

不一定,每个shard中不一定都有拷贝的leader,但是如果请求被分配到当前没有leader的shard中,该请求会默认去同级的shard中寻找leader。

20.leader的作用什么?

真正处理请求事务,当某个leader挂掉后,其他的Replica 会从新选举新的leader

21.用哪一个类来管理集群版的solr连接?

使用SpringDataSolr连接Solr集群,连接的是Zookeeper集群

# 集群版连接
spring.data.solr.zk-host=122.51.50.249:2181,122.51.50.249:2182,122.51.50.249:2183
spring.data.solr.repositories.enabled=true

22.solr中有哪些重要的配置文件

solr.xml (配置集群时候使用,配置集群信息例:SolrCloud的ip 端口,连接超时时间等等)
SolrConfig.xml (配置 标签的内容(solr实例需要的jar),请求的处理)
Schema.xml(配置filed,配置filedType,配置分析器)

23.solr集群必须依赖zookeeper吗

不是。但是使用zookeeper是最方便

24.多张表的数据导入solr(解决id冲突)

在schema.xml中添加uuid,然后solrconfig那边修改update的部分,改为使用uuid生成


举报

相关推荐

0 条评论