- solr内置查询参数有哪些?
- q – 查询字符串,必须的。Solr 中使用的基本查询。
- fq – (filter query)过虑查询,作用:在q查询符合结果中同时是fq查询符合的,
- sort – 排序,格式:sort=<field name>+<desc|asc>[,<field name>+<desc|asc>]… 。示例:(inStock desc, price asc)表示先 “inStock” 降序, 再 “price” 升序,默认是相关性降序。
- start – 返回第一条记录在完整找到结果中的偏移位置,0开始,一般分页用。
- rows – 指定返回结果最多有多少条记录,配合start来实现分页。
- wt – (writer type)指定输出格式,可以有 xml, json, php, phps, 后面 solr 1.3增加的,要用通知我们,因 为默认没有打开。
- fl- field作为逗号分隔的列表指定文档结果中应返回的 Field 集。默认为 “*”,指所有的字段。“score” 指还应 返回记分。
- df – 默认的查询字段(field),一般默认指定
- qt – (query type)指定那个类型来处理查询请求,一般不用指定,默认是standard。
- hl - 设置字段高亮显示(内置还有一些参数)
- solr逻辑运算符有哪些?
布尔操作符AND、&&
布尔操作符OR、||
布尔操作符NOT、!
- solr的竞品你知道有什么?
- ElasticSearch : 基于Lucene的搜索服务器,基于RESTful web接,Elasticsearch是用Java开发的,开源的,多用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。
- Solandra:它就是结合了 Solr 与 Cassandra(Cassandra是一套开源分布式NoSQL数据库系统) 的实时搜索引擎程序,支持Solr的大多数默认特性 (search,faceting,highlights)数据复制,分片,缓存及压缩这些都由Cassandra来进行Multi-master(任意结点都可供读写)实时性高。
- 描述一下solr在整个应用的架构中所处的位置?
1.Solr作为一个独立的全文检索服务器运行。在内部使用JAVA开发的Lucene完成全文本索引和查询,提供RESTful API完成对大多数编程语言的支持。灵活的外部配置使得可以不用编写任何的JAVA代码就能完成工作,同时还提供了插件式的架构来支持更为高级的用户定制。
2.Solr运行在其他的服务器应用程序之外,单独对外提供服务,拿设备管理系统来说,我们要提供一些用户界面:例如,可以发起添加设备的界面,可以查看设备的界面,可以发起领用设备的界面,作为设备管理员,可能还需要对不正确的设备进行调整。无论添加、领用、查看设备等哪个功能,都是围绕着设备展开的。这些信息会同时存在于平台系统的数据库中和Solr系统中,只不过可能会因为存放在不同系统中所要达到的目的和用处不一样,信息的格式和完整度也会有差异。
-
- Solr的查询基于RESTful,也就是说,一个查询的本质就是一个简单的HTTP请求URL和一个结构化的响应文档。响应文档的结构主要包含:XML、JSON、CSV,还有其他格式 。这也意味着,大量的客户应用程序可以使用Solr,比如WEB应用、富客户端应用和移动设备。任何支持HTTP协议的平台都能和Solr进行交互。
- solr是解决什么问题的?
严格来说,lucene负责数据存储,而solr只是一个引擎提供搜索和插入而已,跟数据库的解释器一样,有什么好处呢,比如一个数据库有一个字段存了1000个字,你想从这些字里面搜一个词的时候,普通的数据库只会让你使用like去查询,他会遍历每个字去模糊匹配,效率很低,而且有些是无法查询的,当然除了像一些特殊的数据库带有分词,比如postgresql,那lucene做的事情就是分词,然后去匹配分词的词中是否有你想搜的词就好了,当然了,为了提高这种检索效率和内存节省底层做了很复杂的事情,可以这么简单的认为,全文搜索这件事情上数据库是无法满足的
- 解释一下什么是solrcore?
- solrcore就是solr中的一个实例,也就是索引库,一个solr可以有多个solr实例,多个solr实例之间互不干扰
- 解释一下什么是solrhome?
Solrhome是solr的根目录,也是存放索引库的位置,一个solrhome中可以有多个solrcore。
- 解释一下什么是collection?
- 单机版的solr,collection 就是solrcore 是solr的一个实例(索引库)
- SolrCloud中: collection是逻辑结构上solrcore 的集合
- 在SolrCloud集群中逻辑意义上的完整的索引。它常常被划分为一个或多个Shard,它们使用相同的Config Set。如果Shard数超过一个,它就是分布式索引,SolrCloud让你通过Collection名称引用它,而不需要关心分布式检索时需要使用的和Shard相关参数。
- 如何启动solr实例?
- 如何启动solr集群?
- 如何在指定端口上启动solr实例?
- solr集群必须依赖zookeeper吗?
- 不是。但是使用zookeeper是最方便
- 什么是高亮处理?
Scheam.xml (配置field fieldType IK分词器)
-
- 其实就是多了highlightin(高亮)的字段,并没有改变原来返回的字段内容。
- 如果要对某field做高亮显示,必须对该field设置stored=true *****
- Solrj 有三种高亮处理的方法Standard Highlighter(最常用),根据查询的docIdSet,获取Documents,并获取当前document的需要高亮的field的value,根据query的term和该field的value做匹配算法
- solr中有哪些重要的配置文件?
- solr.xml (配置集群时候使用,配置集群信息例:SolrCloud的ip 端口,连接超时时间等等)
- SolrConfig.xml (配置<lib> 标签的内容(solr实例需要的jar),请求的处理)
- Schema.xml(配置filed,配置filedType,配置分析器)
- 用哪一个标签来定义solr的一个数据类型?
<fieldType>
- 用哪一个标签来定义solr的一个字段?
<field>
- solr的字段有哪些分类?
常用的:
StringField 不分词 索引 存储自定 常用于id,一些唯一的列
LongField 分词 索引 存储自定 常用于数字列
StoredField 不分词 不索引 存储 常用于图片,音频等 只需要展示的列
TextField 分词 索引 存储自定 适用于任何类型(solr 配置分词器的属性类型,一定是此 类型)
- fq的作用是什么?
过滤条件 找第一题
- fl的作用是什么?
找第一题
- 如何设定默认查询字段?
找第一题
- 如何设定高亮?
找第一题
- 做增量索引的时间依据是从哪里获取?(全量索引)
再索引库中collcation/conf/dataimport.properties中的
last_index_time 以这个时间为时间依据
- 什么是分词?
Solr再做索引流程时,需要根据solr的配置文件(scheam.xml)中所定义的分词器的类型进行分词,将文档分成一个一个的term
- 如何设置停用词?
在solr服务的WEB-INF/classes中的 stopword.dic文件中设置
- 停用词的作用?
作用:停用词将不会被分词,节省存储空间,提高查询效率
- 如何做中文分词?
常用IK分词器做中文分词,具体流程:
先分词,后过滤
过滤:
- 去标点
- 大写转小写
- 去停留词
- 什么是solrCloud?
SolrCloud(solr 云)是Solr提供的分布式搜索方案,当你需要大规模,容错,分布式索引和检索能力时使用 SolrCloud。当一个系统的索引数据量少的时候是不需要使用SolrCloud的,当索引量很大,搜索请求并发很高,这时需要使用SolrCloud来满足这些需求。
SolrCloud是基于Solr和Zookeeper的分布式搜索方案,它的主要思想是使用Zookeeper作为集群的配置信息中心。
它有几个特色功能:
1)集中式的配置信息
2)自动容错
3)近实时搜索
4)查询时自动负载均衡
- 如何创建solrCloud?
第一步: 搭建zookeeper集群
第二部: 搭建tomcat集群
第三部:配置每个每个solr实例的solrhome
第四部:将solr的配文件上传到zookeeper统一管理
第五步:配置每个solr服务的端口及ip地址
第六步:每一台solr和zookeeper关联
第七部:完成配置启动服务
- 在solrCloud模式下,配置文件保存在哪里?
保存在zookeeper的服务中,可以通过zookeeper的客户端链接查看
- 描述solrCloud的逻辑结构?
索引集合包括两个Shard(shard1和shard2),shard1和shard2分别由三个Core组成,其中一个Leader两个Replication,Leader是由zookeeper选举产生,zookeeper控制每个shard上三个Core的索引数据一致,解决高可用问题。
用户发起索引请求分别从shard1和shard2上获取,解决高并发问题。
- 描述solrCloud的物理结构?
三个Solr实例( 每个实例包括两个Core),组成一个SolrCloud。
- 什么是shard的拷贝?
Shard replica(副本),一个shard是由多个副本构成的,注意一个Shard中的replica 包含的内容逻辑上应该是一样的,Shard的数据只是其中一份Replica,不是这些副本的组合。
- 一个shard可以有多少个拷贝?
根据实际的业务需求,最多不超过10个。
- 某一个shard的拷贝中是不是一定有一个拷贝为leader?
不一定,每个shard中不一定都有拷贝的leader,但是如果请求被分配到当前没有leader的shard中,该请求会默认去同级的shard中寻找leader。
- leader的作用什么?
真正处理请求事务,当某个leader挂掉后,其他的Replica 会从新选举新的leader
- 用哪一个solrj类来管理单机版的solr连接?
HttpSolrServer
SolrServer server = new HttpSolrServer("http://localhost:8080/solr");
- 用哪一个solrj类来管理集群版的solr连接?
CloudSolrServer
CloudSolrServer server = new CloudSolrServer(zkHost);
- 当使用solrj连接solrCloud的时候我们只需要知道zookeeper地址即可对吗?
不对,还需获取collection的name
- 什么是自动提交?如何配置?
硬提交是关于持久化的,软提交是关于可见性的
有两种自动提交方式:1.自动硬提交,2.自动软提交
硬提交:
一般提交又或者叫硬提交(hard commit), 使用这种提交会把文档立即持久化到磁盘,并可以让你能立马查询到它,因为它会开启一个新的searcher,但是它缺点很明显,就是很耗性能,并会阻塞到提交任务完成,使用它是非常昂贵的操作。
在提交的文档的url里使用commit=true即可使用。
软提交:
软提交,这种提交不会立即把数据写到磁盘,但它可以使你能立即查询到它,就是所谓的支持near real-time (NRT) searching近实时查询,而且这样的操作不昂贵。
在solrConfig.xml中配置如下:
<!-- 自动硬提交 -->
<autoCommit>
<maxTime>${solr.autoCommit.maxTime:30000}</maxTime>
<openSearcher>false</openSearcher>
</autoCommit>
<!-- 自动软提交 -->
<autoSoftCommit>
<maxTime>${solr.autoSoftCommit.maxTime:5000}</maxTime>
</autoSoftCommit>
- 什么是软提交?如何配置?
38题
- Solrclient.commit()的提交方式是软提交吗?
不是,是硬提交。
- 软提交的好处是什么?
这种提交不会立即把数据写到磁盘,但它可以使你能立即查询到它,提高读写效率
- 自动提交可能带来索引的丢失,solr是如何解决这个问题的?
在solrConfig.xml中配置如下属性:
maxDocs:当内存索引数量达到指定值的时候,将内存的索引DUMP到硬盘中,并通知searcher类加载新的索引
maxTime:每隔指定的时间段,自动的COMMIT内存中的索引数据,并通知Searcher类加载新的索引。
- 谈谈lucene和solr的关系?
Lucene是全文检索引擎工具包,不能够独立对外提供搜索和索引服务。
Solr是一个全文检索服务器,可以单独对外提供全文检索服务,并且可扩展、可配置的,提供比lucene更多的查询语句,对lucene进行了性能的优化。
Solr和lucene一样,不提供视图的渲染。
- 描述一下项目中你是如何使用solr的?
首先,在linux系统上搭建solr服务,配置ik分词器,去schema.xml配置文件中定义field域(每种字段的域),需要高亮显示的字段在schema.xml中指定的field中的属性store设置为true,比如:设备的名称,设备描述(凡是可以作为查询条件的均可高亮)等等,当然还可以设值高亮的属性