//可以配置日志、监控、策略、缓存机制等等
//Spellcheck 动态实现下拉效果 /elevate 排序规则
/*
//jar包的路径,根据实际路径配置 不需要的可以删了
<lib dir="D:/solr-4.9.1/contrib/extraction/lib" regex=".*\.jar" />
<lib dir="D:/solr-4.9.1/dist/" regex="solr-cell-\d.*\.jar" />
<lib dir="D:/solr-4.9.1/contrib/clustering/lib/" regex=".*\.jar" />
<lib dir="D:/solr-4.9.1/dist/" regex="solr-clustering-\d.*\.jar" />
<lib dir="D:/solr-4.9.1/contrib/langid/lib/" regex=".*\.jar" />
<lib dir="D:/solr-4.9.1/dist/" regex="solr-langid-\d.*\.jar" />
<lib dir="D:/solr-4.9.1/contrib/velocity/lib" regex=".*\.jar" />
<lib dir="D:/solr-4.9.1/dist/" regex="solr-velocity-\d.*\.jar" />
*/
//默认solr.NRTCachingDirectoryFactory 在linux环境下如果不需要近实时搜索功能,可能solr.MMapDirectoryFactory性能更好
<directoryFactory name="DirectoryFactory" class="${solr.directoryFactory:solr.NRTCachingDirectoryFactory}">
//限制token最大长度
<filter class="solr.LimitTokenCountFilterFactory" maxTokenCount="10000"/>
//IndexWriter等待解锁的最长时间(毫秒)
<writeLockTimeout>1000</writeLockTimeout>
//根据硬件情况设置线程数
<maxIndexingThreads>8</maxIndexingThreads>
//solr默认为false。如果为true,索引文件减少,检索性能降低,追求平衡
<useCompoundFile>false</useCompoundFile>
//默认缓存文档大小
<ramBufferSizeMB>100</ramBufferSizeMB>
//默认缓存文档数量
<maxBufferedDocs>1000</maxBufferedDocs>
//合并策略
<mergePolicy class="org.apache.lucene.index.TieredMergePolicy">
<int name="maxMergeAtOnce">10</int>
<int name="segmentsPerTier">10</int>
</mergePolicy>
//合并因子,每次合并多少个segments
<mergeFactor>10</mergeFactor>
//合并调度器
<mergeScheduler class="org.apache.lucene.index.ConcurrentMergeScheduler"/>
//锁工厂
//single:适用于只读的索引库,即索引库是定死的,不会再更改
//native:使用本地操作系统的文件锁方式,不能用于多个solr服务共用同一个索引库。Solr3.6 及后期版本使用的默认锁机制
//simple:使用简单的文件锁机制
<lockType>${solr.lock.type:native}</lockType>
//是否启动时先解锁
<unlockOnStartup>false</unlockOnStartup>
//Lucene loads terms into memory 间隔
<termIndexInterval>128</termIndexInterval>
//重新打开,替代先关闭-再打开
<reopenReaders>true</reopenReaders>
//提交删除策略,必须实现org.apache.lucene.index.IndexDeletionPolicy
<deletionPolicy class="solr.SolrDeletionPolicy">
//相当于把创建索引时的日志输出
<infoStream file="INFOSTREAM.txt">false</infoStream>
//设置索引库更新日志,默认路径为solr home下面的data/tlog。随着索引库的频繁更新,tlog文件会越来越大,
//所以建议提交索引时采用硬提交方式<autoCommit>,即批量提交。
<updateLog>
<str name="dir">${solr.ulog.dir:}</str>
</updateLog>
//自动硬提交方式 maxTime:设置多长时间提交一次maxDocs:设置达到多少文档提交一次openSearcher:文档提交后是否开启新的searcher,
//如果false,文档只是提交到index索引库,搜索结果中搜不到此次提交的文档;如果true,既提交到index索引库,也能在搜索结果中搜到此次提交的内容。
//autoCommit 硬提交 关注持久化 autoSoftCommit 软提交 关注实时性
<autoCommit>
<maxTime>15000</maxTime>
<maxDocs>10000</maxDocs>
<openSearcher>false</openSearcher>
</autoCommit>
//<query>
//设置boolean 查询中,最大条件数。在范围搜索或者前缀搜索时,会产生大量的 boolean 条件,
//如果条件数达到这个数值时,将抛出异常,限制这个条件数,可以防止条件过多查询等待时间过长。
//maxBooleanClauses 下面还有缓存配置
<maxBooleanClauses>1024</maxBooleanClauses>
//最大缓存文档数
<queryResultWindowSize>20</queryResultWindowSize>
//以下 等等等等 的 默认配置都在solrconfig.xml中配置
<requestHandler name="/select" class="solr.SearchHandler">
<requestHandler name="/query" class="solr.SearchHandler">
<requestHandler name="/get" class="solr.RealTimeGetHandler">
<requestHandler name="/browse" class="solr.SearchHandler">
<requestHandler name="/update" class="solr.UpdateRequestHandler">
<requestHandler name="/update/json" class="solr.UpdateRequestHandler">
<requestHandler name="/update/csv" class="solr.UpdateRequestHandler">
<requestHandler name="/update/extract" startup="lazy" class="solr.extraction.ExtractingRequestHandler">
<requestHandler name="/spell" class="solr.SearchHandler" startup="lazy"> <lst name="defaults">
/*
权重相关配置
举一个例子,电商类网站(比如淘宝)的商品搜索:
在商品名称上出现搜索关键字排序靠前,而内容的次之
对近期发布的商品排序靠前,对多皇冠的买家排序靠前等,对最近销售多商品靠前
综上获得一个综合排名
defType权重类型
bf用函数计算某个字段的权重,如上例子中pub_date发布日期的权重,point比如诚信指数,sale_count销售数量
bf内字段必须是索引的
pf查询字段,这样在schema不用制定默认字段
qf对默认查询增加权重比值,比如标题是content的1.9倍,值越大权重越大
这样查询就会计算如下的一个综合评分值了
对于其他排序,比如说价格排序,在schema增加price字段,然后查询是增加sort=price desc就可以了
在SearchHandler中如下配置
*/
<str name="defType">edismax</str>
<str name="bf">
sum(recip(ms(NOW,pub_date),1,1,100),div(point,5632000),div(sale_count,1000000))
</str>
<str name="pf">
content
</str>
<str name="qf">
name^1.9
</str>