关于 solr solrconfig.xml 的配置说明
1 <?xml version="1.0" encoding="UTF-8" ?> 2 <config> 3 4 <luceneMatchVersion>LUCENE_40</luceneMatchVersion> 5 6 <jmx /> 7 8 <lib dir="http://www.cnblogs.com/http://www.cnblogs.com/dist/" regex="apache-solr-dataimporthandler-.*\.jar" /> 9 10 <updateHandler class="solr.DirectUpdateHandler2"> 11 <maxPendingDeletes>100000</maxPendingDeletes> 12 </updateHandler> 13 14 <query> 15 <maxBooleanClauses>1024</maxBooleanClauses> 16 17 <filterCache 18 class="solr.LRUCache" 19 size="512" 20 initialSize="512" 21 autowarmCount="256"/> 22 23 <queryResultCache 24 class="solr.LRUCache" 25 size="512" 26 initialSize="512" 27 autowarmCount="256"/> 28 29 <documentCache 30 class="solr.LRUCache" 31 size="512" 32 initialSize="512" 33 autowarmCount="0"/> 34 35 <enableLazyFieldLoading>true</enableLazyFieldLoading> 36 37 <queryResultWindowSize>50</queryResultWindowSize> 38 39 <queryResultMaxDocsCached>200</queryResultMaxDocsCached> 40 41 <HashDocSet maxSize="3000" loadFactor="0.75"/> 42 43 <listener event="newSearcher" class="solr.QuerySenderListener"> 44 <arr name="queries"> 45 <lst> 46 <str name="q">solr</str> 47 <str name="start">0</str> 48 <str name="rows">10</str> 49 </lst> 50 <lst> 51 <str name="q">rocks</str> 52 <str name="start">0</str> 53 <str name="rows">10</str> 54 </lst> 55 <lst> 56 <str name="q">static newSearcher warming query from solrconfig.xml</str> 57 </lst> 58 </arr> 59 </listener> 60 61 <listener event="firstSearcher" class="solr.QuerySenderListener"> 62 <arr name="queries"> 63 </arr> 64 </listener> 65 66 <useColdSearcher>false</useColdSearcher> 67 68 <maxWarmingSearchers>4</maxWarmingSearchers> 69 </query> 70 71 <requestDispatcher handleSelect="true" > 72 <requestParsers enableRemoteStreaming="false" multipartUploadLimitInKB="2048" /> 73 <httpCaching never304="true"> 74 </httpCaching> 75 </requestDispatcher> 76 77 <requestHandler name="standard" class="solr.StandardRequestHandler" default="true"> 78 <lst name="defaults"> 79 <str name="echoParams">explicit</str> 80 </lst> 81 </requestHandler> 82 83 <requestHandler name="spellchecker" class="solr.SpellCheckerRequestHandler" startup="lazy"> 84 <lst name="defaults"> 85 <int name="suggestionCount">1</int> 86 <float name="accuracy">0.5</float> 87 </lst> 88 <str name="spellcheckerIndexDir">spell</str> 89 <str name="termSourceField">word</str> 90 </requestHandler> 91 92 <requestHandler name="/mlt" class="solr.MoreLikeThisHandler"> 93 <lst name="defaults"> 94 <str name="mlt.fl">manu,cat</str> 95 <int name="mlt.mindf">1</int> 96 </lst> 97 </requestHandler> 98 99 <requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler"> 100 <lst name="defaults"> 101 <str name="config">db-data-config.xml</str> 102 </lst> 103 </requestHandler> 104 105 <requestHandler name="/search" class="org.apache.solr.handler.component.SearchHandler"> 106 <lst name="defaults"> 107 <str name="echoParams">explicit</str> 108 </lst> 109 </requestHandler> 110 111 <requestHandler name="/elevate" class="org.apache.solr.handler.component.SearchHandler" startup="lazy"> 112 <lst name="defaults"> 113 <str name="echoParams">explicit</str> 114 </lst> 115 <arr name="last-components"> 116 <str>elevator</str> 117 </arr> 118 </requestHandler> 119 120 <requestHandler name="/update" class="solr.UpdateRequestHandler" /> 121 122 <requestHandler name="/admin/" class="org.apache.solr.handler.admin.AdminHandlers" /> 123 124 <requestHandler name="/admin/ping" class="solr.PingRequestHandler"> 125 <lst name="invariants"> 126 <str name="q">solrpingquery</str> 127 </lst> 128 <lst name="defaults"> 129 <str name="echoParams">all</str> 130 </lst> 131 </requestHandler> 132 133 <requestHandler name="/debug/dump" class="solr.DumpRequestHandler" > 134 <lst name="defaults"> 135 <str name="echoParams">explicit</str> 136 <str name="echoHandler">true</str> 137 </lst> 138 </requestHandler> 139 140 <requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler"> 141 <lst name="defaults"> 142 <str name="config">data-config.xml</str> 143 </lst> 144 </requestHandler> 145 146 <searchComponent name="elevator" class="org.apache.solr.handler.component.QueryElevationComponent" > 147 <str name="queryFieldType">string</str> 148 <str name="config-file">elevate.xml</str> 149 </searchComponent> 150 151 <highlighting> 152 <fragmenter name="gap" class="org.apache.solr.highlight.GapFragmenter" default="true"> 153 <lst name="defaults"> 154 <int name="hl.fragsize">100</int> 155 </lst> 156 </fragmenter> 157 158 <fragmenter name="regex" class="org.apache.solr.highlight.RegexFragmenter"> 159 <lst name="defaults"> 160 <int name="hl.fragsize">70</int> 161 <float name="hl.regex.slop">0.5</float> 162 <str name="hl.regex.pattern">[-\w ,/\n\"']{20,200}</str> 163 </lst> 164 </fragmenter> 165 166 <formatter name="html" class="org.apache.solr.highlight.HtmlFormatter" default="true"> 167 <lst name="defaults"> 168 <str name="hl.simple.pre"><![CDATA[<em>]]></str> 169 <str name="hl.simple.post"><![CDATA[</em>]]></str> 170 </lst> 171 </formatter> 172 </highlighting> 173 174 <queryResponseWriter name="xslt" class="solr.XSLTResponseWriter"> 175 <int name="xsltCacheLifetimeSeconds">5</int> 176 </queryResponseWriter> 177 178 <admin> 179 <defaultQuery>*:*</defaultQuery> 180 </admin> 181 182 </config>
1、索引配置
mainIndex 标记段定义了控制Solr索引处理的一些因素.
-
useCompoundFile:通过将很多 Lucene 内部文件整合到单一一个文件来减少使用中的文件的数量。这可有助于减少 Solr 使用的文件句柄数目,代价是降低了性能。除非是应用程序用完了文件句柄,否则
false
的默认值应该就已经足够。 - useCompoundFile:通过将很多Lucene内部文件整合到一个文件,来减少使用中的文件的数量。这可有助于减少Solr使用的文件句柄的数目,代价是降低了性能。除非是应用程序用完了文件句柄,否则false的默认值应该就已经足够了。
- mergeFacor:决定Lucene段被合并的频率。较小的值(最小为2)使用的内存较少但导致的索引时间也更慢。较大的值可使索引时间变快但会牺牲较多的内存。(典型的时间与空间 的平衡配置)
- maxBufferedDocs:在合并内存中文档和创建新段之前,定义所需索引的最小文档数。段是用来存储索引信息的Lucene文件。较大的值可使索引时间变快但会牺牲较多内存。
- maxMergeDocs:控制可由Solr合并的 Document 的最大数。较小的值(<10,000)最适合于具有大量更新的应用程序。
- maxFieldLength:对于给定的Document,控制可添加到Field的最大条目数,进而阶段该文档。如果文档可能会很大,就需要增加这个数值。然后,若将这个值设置得过高会导致内存不足错误。
- unlockOnStartup:告知Solr忽略在多线程环境中用来保护索引的锁定机制。在某些情况下,索引可能会由于不正确的关机或其他错误而一直处于锁定,这就妨碍了添加和更新。将其设置为true可以禁用启动索引,进而允许进行添加和更新。(锁机制)
2、查询处理配置
query标记段中以下一些与缓存无关的特性:
- maxBooleanClauses:定义可组合在一起形成以个查询的字句数量的上限。正常情况1024已经足够。如果应用程序大量使用了通配符或范围查询,增加这个限制将能避免当值超出时,抛出TooMangClausesException。
- enableLazyFieldLoading:如果应用程序只会检索Document上少数几个Field,那么可以将这个属性设置为 true。懒散加载的一个常见场景大都发生在应用程序返回一些列搜索结果的时候,用户常常会单击其中的一个来查看存储在此索引中的原始文档。初始的现实常常只需要现实很短的一段信息。若是检索大型的Document,除非必需,否则就应该避免加载整个文档。
query部分负责定义与在Solr中发生的时间相关的几个选项:
概念:Solr(实际上是Lucene)使用称为Searcher的Java类来处理Query实例。Searcher将索引内容相关的数据加载到内存中。根据索引、CPU已经可用内存的大小,这个过程可能需要较长的一段时间。要改进这一设计和显著提高性能,Solr引入了一张“温暖”策略,即把这些新的Searcher联机以便为现场用户提供查询服务之前,先对它们进行“热身”。
- newSearcher和firstSearcher事件,可以使用这些事件来制定实例化新Searcher或第一个Searcher时,应该执行哪些查询。如果应用程序期望请求某些特定的查询,那么在创建新Searcher或第一个Searcher时就应该反注释这些部分并执行适当的查询。
query中的智能缓存:
- filterCache:通过存储一个匹配给定查询的文档 id 的无序集,过滤器让 Solr 能够有效提高查询的性能。缓存这些过滤器意味着对Solr的重复调用可以导致结果集的快速查找。更常见的场景是缓存一个过滤器,然后再发起后续的精炼查询,这种查询能使用过滤器来限制要搜索的文档数。
- queryResultCache:为查询、排序条件和所请求文档的数量缓存文档 id 的有序集合。
- documentCache:缓存Lucene Document,使用内部Lucene文档id(以便不与Solr唯一id相混淆)。由于Lucene的内部Document id 可以因索引操作而更改,这种缓存不能自热。
- Named caches:命名缓存是用户定义的缓存,可被 Solr定制插件 所使用。
其中filterCache、queryResultCache、Named caches(如果实现了org.apache.solr.search.CacheRegenerator)可以自热。
每个缓存声明都接受最多四个属性:
- class:是缓存实现的Java名
- size:是最大的条目数
- initialSize:是缓存的初始大小
- autoWarmCount:是取自旧缓存以预热新缓存的条目数。如果条目很多,就意味着缓存的hit会更多,只不过需要花更长的预热时间。
对于所有缓存模式而言,在设置缓存参数时,都有必要在内存、cpu和磁盘访问之间进行均衡。统计信息管理页(管理员界面的Statistics)对于分析缓存的 hit-to-miss 比例以及微调缓存大小的统计数据都非常有用。而且,并非所有应用程序都会从缓存受益。实际上,一些应用程序反而会由于需要将某个永远也用不到的条目存储在缓存中这一额外步骤而受到影响。