SOLR面试题系列

本文介绍了Apache Solr,作为基于Lucene的全文搜索服务器,其特点、工作原理,以及配置文件solrconfig.xml和schema.xml的作用。重点讲解了Solr的部署、分类查询和请求处理器,同时涵盖了数据类型、分析器和动态字段的概念。

1、Apache Solr是什么?
 Solr是Apache下的一个顶级开源项目,采用Java开发,是基于Lucene的全文搜索服务器。提供比Lucene更为丰富的查询语言,实现了可配置、可扩展,对索引、搜索性能进行了优化
为什么要solr:
        1.solr是将整个索引操作功能封装好了的企业级搜索引擎产品
        2.solr可以部署到单独的服务器上,它可以提供服务,降低了业务系统的负载
        3.solr部署在专门的服务器上,它的索引库就不会受业务系统服务器存储空间的限制
        4.solr支持分布式集群,索引服务的容量和能力可以线性扩展
solr的工作机制:
        solr就是在lucene工具包的基础之上进行了封装,而且是以web服务的形式对外提供索引功能
业务系统需要使用到索引的功能(建索引,查索引)时,只要发出http请求,并将返回数据进行解析即可
lucene和solr的关系
        solr是门户,lucene是底层基础,solr和lucene的关系正如hadoop和hdfs的关系。

2、哪个文件包含数据目录的配置?
Solrconfig.xml包含数据目录的配置.

3、哪个文件包含文档field及field类型的定义?
schema.xml包含文档field及field类型的定义.

4、 Apache Solr的特点是什么?
允许可扩展,高性能索引,接近实时索引。
基于标准的开放接口,如XML、JSON和HTTP。
灵活和高适应的分类查询。
高级和准确的全文搜索。
线性可扩展,自动索引复制,自动故障转移和恢复。
允许并发搜索和更新。
全面的HTML管理界面。
提供与索引兼容的跨平台解决方案。

5、Apache Lucene是什么?
Apache Lucene是一个由Doug Cutting用Java编写的免费、开源、高性能的文本搜索引擎库,由Apache软件基金会提供支持。Lucence为各种格式的文档(如MS Office文档、HTML、PDF、文本文档等)提供了功能齐全的搜索、高亮显示、索引和拼写检查。
注意:solr和elasticsearch都是基于lucence的。

6、 请求处理器RequestHandler是什么?
当用户在Solr中运行搜索时,搜索查询由请求处理器RequestHandler处理。SolrRequestHandler是一个Solr插件,它包含了在任何request.Solrconfig.xml文件中执行的逻辑(包含多个具有不同配置的相同SolrRequestHandler类的实例)。

7、field类型包含哪些信息?
field类型包含4类信息:
field类型名称.
Field属性.
实现类.
若为Text Field , 该field类型的分析描述 

8、 说一下Solr中的分类查询Faceting ?
如名称所示,分类查询Faceting是对查询结果的重组和归类。分类查询可以让用户更好的查找到准确的结果。

9、如何定义动态Field?
<dynamicField name="*_i" type="int" indexed="true" stored="true"/>
如果用户偶然忘记定义一个或多个字段,则动态字段是一个有用的特性。它们可以非常灵活地为模式中没有显式定义的字段建立索引。 

10、Field分析器Analyzer是什么?
分析器Analyzer:在创建索引、查询索引时使用。分析器检查字段的文本并生成标记流。分析器可能是一个单独的类,或者它们可能由一系列的标记器和过滤器类组成。 

11、tokenizer的作用?
分词器Tokenizer:将字段数据分解为词法单位或标记。 

12、Solr基本数据类型有哪些?
date,long,double,text,float

13、solrconfig.xml配置文件中通用的元素有哪些?
1.搜索组件
2.缓存参数
3.Data存放目录
4.请求处理器

 

### Solr Java 面试题及解答 #### 1. Solr 是什么? Solr是一个高性能,采用Java5开发,基于Lucene的全文搜索服务器。Solr提供了比Lucene更为丰富的查询语言,同时实现了强大的全文检索功能[^4]。 #### 2. 如何配置Solr以支持分布式搜索? 为了使Solr能够执行跨多台机器的数据索引和查询操作,可以利用SolrCloud模式部署集群环境。这涉及到Zookeeper协调服务的应用以及schema.xml文件中的shard参数设定,从而让客户端请求自动路由到对应的分片节点上完成数据读写工作[^5]。 #### 3. 解释一下Solr中的Schema设计原则是什么样的? 在定义文档结构时应遵循如下几个方面考虑: - 字段类型的选择要合理; - 尽量减少不必要的字段存储; - 对频繁使用的过滤条件建立专门的facet field; - 使用copyField特性复制原始内容至其他目标field以便更灵活地满足不同场景下的需求; 以上这些措施有助于提高性能并简化维护成本[^6]。 #### 4. Solr是如何处理近实时搜索(NRT)特性的? 当启用NRT后,在每次提交新记录之后都会立即触发一次软提交动作而不刷新整个索引段,使得新增加的信息可以在极短时间内被检索出来显示给用户查看。这种方式既保持了一定程度上的及时性又兼顾到了系统资源的有效利用率[^7]。 ```java // 示例代码展示如何通过API向Solr添加文档 public void addDocument(SolrClient solr, String id, String name){ try { SolrInputDocument doc = new SolrInputDocument(); doc.addField("id", id); doc.addField("name", name); UpdateResponse response = solr.add(doc); // 添加单条记录 solr.commit(); // 提交更改 } catch (Exception e) { System.out.println(e.getMessage()); } } ``` #### 5. 在大规模应用环境中怎样优化Solr性能表现? 针对高并发访问情况可以从硬件层面增加服务器数量形成负载均衡架构;软件角度则需调整JVM堆大小、缓存策略(如filterCache)、开启压缩传输等功能选项来降低延迟时间提升响应速度[^8]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值