更新时间:2024-11-29 GMT+08:00

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性能调优