solr面试题

solr面试题

Solr

1. 是什么?
化繁为简的介绍一下这个技术是干嘛的

solr是基于Lucene的,主要用作全文检索。

2. 同类型技术
ElasticSearch,这个时候很自然的需要去了解两种技术的简单区别。

ElasticSearch vs Solr多维度分析对比

3. 大概介绍介绍?
最好加入自己的一些心得和总结

2个端(服务端+客户端)
涉及到服务器安装配置和客户端操作。

服务端,安装就是解压一个war包,添加一些jar包,配置scheme.xml

solr的客户端,客户端操作可以用solrj或者spring-data-solr,到时候也可以进行二次封装,也可以不需要,因为都是封装给了service层,controller直接传入对象给service层就可以了。

项目使用spring-data-solor的情况

项目使用solrj的情况

solr的客户端,主要就是学会 索引库的操作 和 各种条件的搜索

索引库的操作:
新增、删除、更新

各种条件的搜索:
普通域查询
复制域查询
动态域查询
分页查询
分组查询
高亮查询
过滤查询
区间查询
排序查询

4. 具体使用
这里开始再说具体的使用

服务端安装
解压一个solr-4.10.3.war
拷贝example/lib/ext下的日志输出包

配置solrhome
配置(修改schema.xml)

配置中文分词器,IK Analyzer
配置域、复制域、动态域

客户端操作
这里开始再说具体的使用
能记住记过算几个,记不住也正常

a) solrj
关键的几个类
主要是solrServer完成文档操作和搜索
solrServer,SolrInputDocument,SolrQuery,SearchResult

b) spring-data-solr
关键的几个类
主要是SolrTemplate完成文档操作和搜索
SolrTemplate、Query、Criteria

5. 实际应用场景
这个是非常重要的,实际项目中用solr完成了什么,也可以优先告知面试官。

6. 可以拓展拓展
solr会考虑集群
solr索引库在商品状态发生改变的时候(审核通过、删除),会通过activeMQ通知更新。
solr搜索结果,可以通过redis缓存

7. 表表态
solr还是不难,自己做搜索没啥问题,大概2、3天就能完成复杂的搜索情况。

1. Solr 是什么?

Solr它是一种开放源码的、基于 Lucene Java 的搜索服务器,易于加入到 Web 应用程序中。
Solr 提供了层面搜索(就是统计)、命中醒目显示并且支持多种输出格式(包括XML/XSLT 和JSON等格式)。它易于安装和配置,而且附带了一个基于HTTP 的管理界面。
可以使用 Solr 的表现优异的基本搜索功能,也可以对它进行扩展从而满足企业的需要。
2. List item

Solr的特性包括:

高级的全文搜索功能

专为高通量的网络流量进行的优化

基于开放接口(XML和HTTP)的标准

综合的HTML管理界面

可伸缩性-能够有效地复制到另外一个Solr搜索服务器

使用XML配置达到灵活性和适配性

可扩展的插件体系

1. Lucene 是什么?

Lucene是一个基于Java的全文信息检索工具包,它不是一个完整的搜索应用程序,而是为你的应用程序提供索引和搜索功能。Lucene 目前是 Apache Jakarta(雅加达) 家族中的一个开源项目。也是目前最为流行的基于Java开源全文检索工具包。目前已经有很多应用程序的搜索功能是基于 Lucene ,比如Eclipse 帮助系统的搜索功能。Lucene能够为文本类型的数据建立索引,所以你只要把你要索引的数据格式转化的文本格式,Lucene 就能对你的文档进行索引和搜索。

2. Solr vs Lucene

Solr 依存于Lucene,因为Solr底层的核心技术是使用Lucene 来实现的
Solr和Lucene的本质区别有以下三点:搜索服务器,企业级和管理。
Lucene本质上是搜索库,不是独立的应用程序,而Solr是。
Lucene专注于搜索底层的建设,而Solr专注于企业应用。
Lucene不负责支撑搜索服务所必须的管理,而Solr负责。
所以说,一句话概括 Solr: Solr是Lucene面向企业搜索应用的扩展

3.Solr加入中文分词器

中文分词在solr里面是没有默认开启的,需要我们自己配置一个中文分词器。目前可用的分词器有smartcn,IK,Jeasy,庖丁。其实主要是两种,一种是基于中科院ICTCLAS的隐式马尔科夫HMM算法的中文分词器,如smartcn,ictclas4j,优点是分词准确度高,缺点是不能使用用户自定义词库;另一种是基于最大匹配的分词器,如IK ,Jeasy,庖丁,优点是可以自定义词库,增加新词,缺点是分出来的垃圾词较多。

4.Solr 加上 EmbeddedSolrServer(嵌入式服务器)

使用Solr 加上 EmbeddedSolrServer(嵌入式服务器),方便进行代码跟踪调试.在功能上和其它服务器都是一样的,它们都是继承的SolrServer来提供服务API的. EmbeddedSolrServer优点是不用起http协议,直接加载SolrCore进行操作,性能上应该是最快的,方便用于把Solr单结点服务嵌入到项目中使用.

5.Elasticsearch vs solr

Elasticsearch跟Solr一样,也是一个基于Lucene的搜索服务器,它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口

1、Elasticsearch的优缺点:

优点:
1.Elasticsearch是分布式的。不需要其他组件,分发是实时的,被叫做”Push replication”。
2.Elasticsearch 完全支持 Apache Lucene 的接近实时的搜索。
3.处理多租户(multitenancy)不需要特殊配置,而Solr则需要更多的高级设置。
4.Elasticsearch 采用 Gateway 的概念,使得完备份更加简单。
5.各节点组成对等的网络结构,某些节点出现故障时会自动分配其他节点代替其进行工作。
缺点:
1.只有一名开发者(当前Elasticsearch GitHub组织已经不只如此,已经有了相当活跃的维护者)
2.还不够自动(不适合当前新的Index Warmup API)

2、Solr的优缺点:

优点
1.Solr有一个更大、更成熟的用户、开发和贡献者社区。
2.支持添加多种格式的索引,如:HTML、PDF、微软 Office 系列软件格式以及 JSON、XML、CSV 等纯文本格式。
3.Solr比较成熟、稳定。
4.不考虑建索引的同时进行搜索,速度更快。
缺点
1.建立索引时,搜索效率下降,实时索引搜索效率不高。
2、Elasticsearch 与 Solr 的比较:

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

使用案例:
1.维基百科使用Elasticsearch来进行全文搜做并高亮显示关键词,以及提供search-as-you-type、did-you-mean等搜索建议功能。
2.英国卫报使用Elasticsearch来处理访客日志,以便能将公众对不同文章的反应实时地反馈给各位编辑。
3.StackOverflow将全文搜索与地理位置和相关信息进行结合,以提供more-like-this相关问题的展现。
4.GitHub使用Elasticsearch来检索超过1300亿行代码。
5.每天,Goldman Sachs使用它来处理5TB数据的索引,还有很多投行使用它来分析股票市场的变动。

2、相关面试题

1、solr如何实现搜索的?

倒排索引,先抽取文档中词,并建立词与文档id的映射关系,然后查询的时候会根据词去查询文档id,并查询出文档

2、Solr过滤器

Solr的过滤器对接收到的标记流(TokenStream )做额外的处理

过滤查询,在查询时设置

3、Solr原理

Solr是基于Lucene开发的全文检索服务器,而Lucene就是一套实现了全文检索的api,其本质就是一个全文检索的过程。全文检索就是把原始文档根据一定的规则拆分成若干个关键词,然后根据关键词创建索引,当查询时先查询索引找到对应的关键词,并根据关键词找到对应的文档,也就是查询结果,最终把查询结果展示给用户的过程

4、Solr基于什么

基于lucene搜索库的一个搜索引擎框架,lucene是一个开放源码的全文检索引擎工具包

solr怎么设置搜索结果排名靠前

设置文档中域的boost值,值越高相关性越高,排名就靠前

5、IK分词器原理

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

6、solr的索引查询为什么比数据库要快

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

7、solr索引库个别数据索引丢失怎么办

首先Solr是不会丢失个别数据的。如果索引库中缺少数据,那就向索引库中添加

8、Lucene索引优化

直接使用Lucene实现全文检索已经是过时的方案,推荐使用solr。Solr已经提供了完整的全文检索解决方案

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

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

10、solr如何分词,新增词和禁用词如何解决

schema.xml文件中配置一个IK分词器,然后域指定分词器为IK

新增词添加到词典配置文件中ext.dic,禁用词添加到禁用词典配置文件中stopword.dic,然后在schema.xml文件中配置禁用词典:

11、solr多条件组合查询

创建多个查询对象,指定他们的组合关系,Occur.MUST(必须满足and),Occur.SHOULD(应该满足or),Occur.MUST_NOT(必须不满足not)

elasticsearch 了解多少,说说你们公司 es 的集群架构,索引数据大小,分片有多少,以及一些调优手段。elasticsearch 的倒排索引是什么。

ElasticSearch(简称ES)是一个分布式、Restful的搜索及分析服务器,设计用于分布式计算;能够达到实时搜索,稳定,可靠,快速。和Apache Solr一样,它也是基于Lucence的索引服务器,而ElasticSearch对比Solr的优点在于:

轻量级:安装启动方便,下载文件之后一条命令就可以启动。

Schema free:可以向服务器提交任意结构的JSON对象,Solr中使用schema.xml指定了索引结构。

多索引文件支持:使用不同的index参数就能创建另一个索引文件,Solr中需要另行配置。

12、分布式:Solr Cloud的配置比较复杂。

倒排索引是实现“单词-文档矩阵”的一种具体存储形式,通过倒排索引,可以根据单词快速获取包含这个单词的文档列表。倒排索引主要由两个部分组成:“单词词典”和“倒排文件”。

13、elasticsearch 索引数据多了怎么办,如何调优,部署

1. 使用bulk API

初次索引的时候,把 replica 设置为 0

增大 threadpool.index.queue_size

增大 indices.memory.index_buffer_size

增大 index.translog.flush_threshold_ops

增大 index.translog.sync_interval

增大 index.engine.robin.refresh_interval
http://www.jianshu.com/p/5eeeeb4375d4

14、lucence 内部结构是什么

索引(Index): 在Lucene中一个索引是放在一个文件夹中的。 如上图,同一文件夹中的所有的文件构成一个Lucene索引。

段(Segment): 一个索引可以包含多个段,段与段之间是独立的,添加新文档可以生成新的段,不同的段可以合并。

segments.gen和segments_X是段的元数据文件,也即它们保存了段的属性信息。

文档(Document): 文档是我们建索引的基本单位,不同的文档是保存在不同的段中的,一个段可以包含多篇文档。

新添加的文档是单独保存在一个新生成的段中,随着段的合并,不同的文档合并到同一个段中。

域(Field):
一篇文档包含不同类型的信息,可以分开索引,比如标题,时间,正文,作者等,都可以保存在不同的域里。 不同域的索引方式可以不同,在真正解析域的存储的时候,我们会详细解读。

词(Term):
词是索引的最小单位,是经过词法分析和语言处理后的字符串。

15、solr和lucene的区别
Solr和Lucene的本质区别有以下三点:搜索服务器,企业级和管理。Lucene本质上是搜索库,不是独立的应用程序,而Solr是。Lucene专注于搜索底层的建设,而Solr专注于企业应用。Lucene不负责支撑搜索服务所必须的管理,而Solr负责。所以说,一句话概括Solr: Solr是Lucene面向企业搜索应用的扩展

Lucene: 是一个索引与搜索类库,而不是完整的程序。

Solr:是一个高性能,采用Java5开发,基于Lucene的一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口。

  • 3
    点赞
  • 58
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值