Solr配置集文件solrconfig.xml
“solrconfig.xml”文件定义Solr的索引、查询的处理配置和组件信息配置。本章节介绍常用的几项配置,如果需要对参数进行调优,详情参考“Solr性能调优”章节。
indexConfig
- <writeLockTimeout>1000</writeLockTimeout>
“writeLockTimeout”表示IndexWriter实例在获取写锁的时候最大等待超时时间,超过指定的超时时间仍未获取到写锁,则IndexWriter写索引操作将会发生异常。
- <maxIndexingThreads>8</maxIndexingThreads>
创建索引的最大线程数,默认是开辟8个线程来创建索引。
- <ramBufferSizeMB>100</ramBufferSizeMB>
表示创建索引时内存缓存大小,单位是MB,默认最大是100MB。
- <maxBufferedDocs>1000</maxBufferedDocs>
表示在document写入到硬盘之前,缓存的document最大个数,超过这个最大值会触发索引的flush操作。
- <mergePolicy class="org.apache.lucene.index.TieredMergePolicy">
<int name="maxMergeAtOnce">10</int>
<int name="segmentsPerTier">10</int>
</mergePolicy>
索引的合并策略,筛选出哪些段需要合并,maxMergeAtOnce表示一次最多合并段个数。
- <mergeFactor>10</mergeFactor>
控制索引在写入磁盘之前内存中能缓存的document数量,以及合并多个段文件的频率。
- <lockType>${solr.lock.type:native}</lockType>
- single :表示只读锁,没有另外一个处理线程会去修改索引数据。
- native:即Lucene中的NativeFSLockFactory实现,使用的是基于操作系统的本地文件锁。
- simple:即Lucene中的SimpleFSLockFactory实现,通过在硬盘上创建write.lock锁文件实现。
- <unlockOnStartup>false</unlockOnStartup>
如果这个设置为“true”,那么在Solr启动后,IndexWriter和commit提交操作拥有的锁将会被释放,这会打破Lucene的锁机制,请谨慎使用。如果你的“lockType”设置为“single”,那么这个配置“true”或者“false”都不会产生任何影响。
Update
- <updateHandler class="solr.DirectUpdateHandler2">
指定索引更新操作处理类,DirectUpdateHandler2是一个高性能的索引更新处理类,它支持软提交
- <autoCommit>
<maxTime>${solr.autoCommit.maxTime:15000}</maxTime>
<openSearcher>true</openSearcher>
</autoCommit>
maxTime:每隔指定的时间段,自动的COMMIT内存中的索引数据,并通知Searcher类加载新的索引。
- <autoSoftCommit>
<maxTime>${solr.autoSoftCommit.maxTime:1000}</maxTime>
</autoSoftCommit>
设置“maxTime”表示索引提交后最大多长时间可以搜索到刚刚创建的索引,它可以搜索到当前的内存中索引的改变,而不用把索引sync到磁盘上。如果设置为“-1”则必须在创建索引时需要commit=true,刚刚提交的索引才能看到。设置为“-1”时的场景往往是在批量建索引时,这时autoCommit的openSearcher需要设置为true,一般不同时进行查询操作。
Query
<query>标签是有关索引查询相关的配置项。
- filterCache:通过存储一个匹配给定查询的文档id的无序集,过滤器让Solr能够有效提高查询的性能。缓存这些过滤器意味着对Solr的重复调用可以导致结果集的快速查找。更常见的场景是缓存一个过滤器,然后再发起后续的精炼查询,这种查询能使用过滤器来限制要搜索的文档数。
- queryResultCache:查询结果的文档id的有序集合。
- documentCache:缓存Lucene Document,使用内部Lucene文档id(以便不与Solr唯一ID相混淆)。由于Lucene的内部Document id可以因索引操作而更改,这种缓存不能自热。
- Named caches:命名缓存是用户定义的缓存,可被Solr定制插件所使用。
- class:缓存实现的Java名。
- size:最大的条目数。
- initialSize:缓存的初始大小。
- autoWarmCount:取自旧缓存以预热新缓存的条目数。如果条目很多,就意味着缓存的hit会更多,只不过需要花更长的预热时间。
说明:对于所有缓存模式而言,在设置缓存参数时,都有必要在内存、CPU和磁盘访问之间进行均衡。详细请参考Solr性能调优。