前言
Solr是一个开源搜索平台,用于构建搜索应用程序。 是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口 它建立在Lucene(全文搜索引擎)之上。 Solr是企业级的,快速的和高度可扩展的。 用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引;也可以通过Http Get操作提出查找请求,并得到XML格式的返回结果。
Solr调优部分总结
博主在工作中有一个基于Solr的全文检索项目,由于要求及时响应,故对Solr集群做了一些调优!
当Solr索引数据存放在本地磁盘或者HDFS时,可以从以下几个方面进行调优配置:
1、Schema的配置优化•uniqueKey定义为long类型
说明:
- long类型的查询性能优于string类型,如果需要定义为string类型,可以在业务层建立long到string的映射。
- 建议unqiueKey字段配置required="true"。
- 建议uniqueKey字段配置docValues="true"。
- 为了获得更好的查询性能,建议查询时显式地指定返回字段为uniqueKey字段。
- 需要排序、统计的字段配置为docValues="true",可以有效节省内存使用(配置docValues="true"后,不需要再配置stored="true")
2、优化索引方案
可以通过修改“solrconfig.xml”文件内容来实现以下调优效果。
调优配置项 | 修改结果 |
---|---|
提高索引速度,加大索引线程数 | \<maxlndexingThreads>$(solr.maxlndexingThreads:16}</maxlndexingThreads\> |
增大文档索引缓存 | \<ramBufferSizeMB>1024\</ramBufferSizeMB> |
增大索引段合并因子 | \<memergeFactor>20\</mergeFactor> |
加大索引自动硬提交时间 | maxTime>$fsolr.autoCommit.maxTime:300001\</maxTime> |
增大索引的自动软提交时间 | \<maxTime>$solr.autoSoftCommit.maxTime:600001\</maxTime> |
基于docValues获取uniqueKey的值 | \<useDocValueGetField>true\</useDocValueGetField> |
对docld进行排序,优先顺序读取磁盘 | \<sortDocldBeforeGetDoc>true\</sortDocldBeforeGetDoc> |
缓存docld,避免二次读取磁盘 | \<useQuickFirstMatch>true\< /useQuickFirstMatch> |
说明:
useDocValueGetField的使用场景:
- 返回字段(fl)为uniqueKey
- uniqueKey为Numberic类型(long/int/float/double)
- uniqueKey配置docValues=true
useQuickFirstMatch的使用场景:
- 索引入库后不再更改(删除/合并操作等)
3、优化查询方案
缓存在Solr中充当了一个非常重要的角色,Solr中主要包括以下3种缓存:
- Filter cache(过滤器缓存),用于保存过滤器(fq参数)和层面搜索的结果;
- Document cache(文档缓存),用于保存lucene文档存储的字段;
Query result(查询缓存),用于保存查询的结果。
说明:
- Solr中还包含lucene内部缓存,该缓存用户无法调控。
通过调整这3种缓存,可以对Solr的搜索实例进行调优。
可以通过修改“solrconfig.xml”文件内容配置缓存,如下:
缓存类型 | 修改方案 |
---|---|
过滤器缓存 | \<filterCache class="solr.FastLRUCache" size="200" initialSize="200" autowarmCount="50"/\>“size”和“initialSize”值为缓存document id的数量“autowarmCount”为“initialSize”值的1/4,根据实际场景合理设置,过大会占用大量内存 |
查询结果缓存 | \<queryResultCache class="solr.FastLRUCache" size="3000"initialSize="3000autowarmCount="750"/>“size”和“initialSize”的值 = 不同查询和不同排字的数x 每次询字最数x2."autowarmCount”值为“initialSize”值的1/4. |
文档缓存 | ”size”和“initialSize”的值 = 一次询返回最大的文档数量x实例询的并发数 |
总结
Solr作为全文检索服务器时,主要是从Solr自身JVM、Schema、Solrconfig方面以及服务器性能上进行调优。