来源:http://blog.csdn.net/zx13525079024/article/details/25310781

solrconfig.xml配置文件主要定义了SOLR的一些处理规则,包括索引数据的存放位置,更新,删除,查询的一些规则配置。

可以在tomcat的安装路径下找到这个文件C:\Program Files\Apache Software Foundation\Tomcat 8.0\solr\collection1\conf

1.datadir节点

<dataDir>${solr.data.dir:d:/Server/Solr/data}</dataDir>定义了索引数据和日志文件的存放位置

2.luceneMatchVersion

<luceneMatchVersion>4.8</luceneMatchVersion>表示solr底层使用的是lucene4.8

3. lib

<lib dir="../../../contrib/extraction/lib"regex=".*\.jar"/>表示solr引用包的位置,当dir对应的目录不存在时候,会忽略此属性

4.directoryFactory

<directoryFactory class="${solr.directoryFactory:solr.NRTCachingDirectoryFactory}" name="DirectoryFactory">
<str name="solr.hdfs.home">${solr.hdfs.home:}</str>
<str name="solr.hdfs.confdir">${solr.hdfs.confdir:}</str>
<str name="solr.hdfs.blockcache.enabled">${solr.hdfs.blockcache.enabled:true}</str>
<str name="solr.hdfs.blockcache.global">${solr.hdfs.blockcache.global:true}</str>
</directoryFactory>

索引存储方案,共有以下存储方案

1、solr.StandardDirectoryFactory,这是一个基于文件系统存储目录的工厂,它会试图选择最好的实现基于你当前的操作系统和Java虚拟机版本。
           2、solr.SimpleFSDirectoryFactory,适用于小型应用程序,不支持大数据和多线程。
           3、solr.NIOFSDirectoryFactory,适用于多线程环境,但是不适用在windows平台(很慢),是因为JVM还存在bug。
           4、solr.MMapDirectoryFactory,这个是solr3.1到4.0版本在linux64位系统下默认的实现。它是通过使用虚拟内存和内核特性调用。

mmap去访问存储在磁盘中的索引文件。它允许lucene或solr直接访问I/O缓存。如果不需要近实时搜索功能,使用此工厂是个不错的方案。
           5、solr.NRTCachingDirectoryFactory,此工厂设计目的是存储部分索引在内存中,从而加快了近实时搜索的速度。
           6、solr.RAMDirectoryFactory,这是一个内存存储方案,不能持久化存储,在系统重启或服务器crash时数据会丢失。且不支持索引复制。

5. codecFactory

   <codecFactory class="solr.SchemaCodecFactory"/>
<schemaFactory class="ClassicIndexSchemaFactory"/>

  编解码工厂允许使用自定义的编解码器。例如:如果想启动per-field DocValues格式, 可以在solrconfig.xml里面设置SchemaCodecFactory:
    docValuesFormat="Lucene42": 这是默认设置,所有数据会被加载到堆内存中。
    docValuesFormat="Disk": 这是另外一个实现,将部分数据存储在磁盘上。
    docValuesFormat="SimpleText": 文本格式,非常慢,用于学习。

  6.indexconfig节点

用于设置索引的低级别的属性

<!--限制token最大长度-->
<filter class="solr.LimitTokenCountFilterFactory" maxTokenCount="10000" />
<!--IndexWriter等待解锁的最长时间(毫秒)-->
<writeLockTimeout>1000</writeLockTimeout>
<!--最大的索引线程数-->
<maxIndexingThreads>8</maxIndexingThreads>
<!--solr默认为false。如果为true,索引文件减少,检索性能降低,追求平衡。-->
<useCompoundFile>false</useCompoundFile>
<!--该参数决定写入内存索引文档个数,到达该数目后就把该内存索引写入硬盘,生成一个新的索引segment文件。
所以该参数也就是一个内存buffer,一般来说越大索引速度越快。
MaxBufferedDocs这个参数默认是disabled的,因为Lucene中还用另外一个参数(RAMBufferSizeMB)控制这个bufffer的索引文档个数。
其实MaxBufferedDocs和RAMBufferSizeMB这两个参数是可以一起使用的,一起使用时只要有一个触发条件满足就写入硬盘,生成一个新的索引segment文件。
-->
<ramBufferSizeMB>100</ramBufferSizeMB>
<!--控制用于buffer索引文档的内存上限,如果buffer的索引文档个数到达该上限就写入硬盘。当然,一般来说也只越大索引速度越快。
当我们对文档大小不太确定时,这个参数就相当有用,不至于outofmemory error.
-->
<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" />
<!--锁工厂-->
<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">
<str name="maxCommitsToKeep">1</str>
<str name="maxOptimizedCommitsToKeep">0</str>
<str name="maxCommitAge">30MINUTES</str>
</deletionPolicy>
<!--相当于把创建索引时的日志输出-->
<infoStream file="INFOSTREAM.txt">false</infoStream>
 <lockType>${solr.lock.type:native}</lockType>

设置索引库的锁方式,主要有三种:
        1.single:适用于只读的索引库,即索引库是定死的,不会再更改
        2.native:使用本地操作系统的文件锁方式,不能用于多个solr服务共用同一个索引库。Solr3.6 及后期版本使用的默认锁机制。
        3.simple:使用简单的文件锁机制

 7. updateHandler节点

定义更新处理器:

<updateHandler class="solr.DirectUpdateHandler2">
<!-- 允许事务日志 -->
<updateLog>
<str name="dir">${solr.ulog.dir:}</str>
</updateLog> <!--
在满足一定条件时自动提交。maxDocs/maxTime/openSearcher
-->
<autoCommit>
<maxTime>15000</maxTime>
<openSearcher>false</openSearcher>
</autoCommit> <!-- 软提交VS硬提交 -->
<!--
<autoSoftCommit>
<maxTime>1000</maxTime>
</autoSoftCommit>
--> <!--
更新相关事件监听器
postCommit - fired after every commit or optimize command
postOptimize - fired after every optimize command
-->
<!-- The RunExecutableListener executes an external command from a
hook such as postCommit or postOptimize.
exe - the name of the executable to run
dir - dir to use as the current working directory. (default=".")
wait - the calling thread waits until the executable returns.
(default="true")
args - the arguments to pass to the program. (default is none)
env - environment variables to set. (default is none)
-->
<!--
<listener event="postCommit" class="solr.RunExecutableListener">
<str name="exe">solr/bin/snapshooter</str>
<str name="dir">.</str>
<bool name="wait">true</bool>
<arr name="args"> <str>arg1</str> <str>arg2</str> </arr>
<arr name="env"> <str>MYVAR=val1</str> </arr>
</listener>
--> </updateHandler>

<updateHandler >设置索引库更新日志,默认路径为solr home下面的data/tlog。随着索引库的频繁更新,tlog文件会越来越大, 所以建议提交索引时采用硬提交方式<autoCommit>,即批量提交。

<autoCommit>自动硬提交方式:

maxTime:设置多长时间提交一次

maxDocs:设置达到多少文档提交一次

openSearcher:文档提交后是否开启新的searcher,如果false,文档只是提交到index索引库,搜索结果中搜不到此次提交的文档;如果true,既提交到index索引库,也能在搜索结果中搜到此次提交的内容。

 8.Query查询节点

  缓存方法http://www.cnblogs.com/phinecos/archive/2012/05/24/2517018.html

<filterCache class="solr.FastLRUCache" size="512" initialSize="512" autowarmCount="0"/>

<queryResultCache class="solr.LRUCache" size="512" initialSize="512" autowarmCount="0"/>

<documentCache class="solr.LRUCache" size="512" initialSize="512" autowarmCount="0"/>

<queryResultMaxDocsCached>200</queryResultMaxDocsCached>

<maxWarmingSearchers>2</maxWarmingSearchers>

9.Request Dispatcher

请求转发器

<!-- Request Dispatcher
主要是介绍当有请求访问SolrCore时SolrDispatchFilter如何处理。
handleSelect是一个以前版本中遗留下来的属性,会影响请求的对应行为(比如/select?qt=XXX)。
当handleSelect="true"时导致SolrDispatchFilter将请求转发给qt指定的处理器(前提是/select已经注册)。
当handleSelect="false"时会直接访问/select,若/select未注册则为404。
-->
<requestDispatcher handleSelect="false" > <!-- Request Parsing:请求解析
这些设置说明Solr Requests如何被解析,以及对ContentStreams有什么限制。 enableRemoteStreaming - 是否允许使用stream.file和stream.url参数来指定远程streams。 multipartUploadLimitInKB - 指定多文件上传时Solr允许的最大的size。 formdataUploadLimitInKB - 表单通过POST请求发送的最大size
-->
<requestParsers enableRemoteStreaming="true"
multipartUploadLimitInKB="2048000"
formdataUploadLimitInKB="2048"/> <!-- HTTP Caching
设置HTTP缓存的相关参数。
-->
<httpCaching never304="true" /> <!--
<httpCaching never304="true" >
<cacheControl>max-age=30, public</cacheControl>
</httpCaching>
--> <!--
<httpCaching lastModifiedFrom="openTime"
etagSeed="Solr">
<cacheControl>max-age=30, public</cacheControl>
</httpCaching>
-->
</requestDispatcher>

10.requestHandler

请求处理器

<!-- Request Handlers
输入的请求会通过请求中的路径被转发到特定的处理器。
-->
<!-- SearchHandler
基本的请求处理器是SearchHandler,它提供一系列SearchComponents。
通过multiple shards支持分布式。
-->
<requestHandler name="/select" class="solr.SearchHandler">
<!-- 可以指定默认值。-->
<lst name="defaults">
<str name="echoParams">explicit</str>
<int name="rows">10</int>
<str name="df">text</str>
</lst>
<!-- 添加属性 -->
<!--
<lst name="appends">
<str name="fq">inStock:true</str>
</lst>
--> <!-- 用法同上,尽量不要使用。-->
<!--
<lst name="invariants">
<str name="facet.field">cat</str>
<str name="facet.field">manu_exact</str>
<str name="facet.query">price:[* TO 500]</str>
<str name="facet.query">price:[500 TO *]</str>
</lst>
-->
<!-- 下面的配置可以重置SearchComponents-->
<!--
<arr name="components">
<str>nameOfCustomComponent1</str>
<str>nameOfCustomComponent2</str>
</arr>
-->
</requestHandler>

如果想更深入了解,可以参考下这几篇文章,

http://wiki.apache.org/solr/SolrConfigXml/

http://www.yunvn.com/thread-15932-1-1.html

http://www.luoshengsha.com/197.html

利用SOLR搭建企业搜索平台 之——solr配置solrconfig.xml的更多相关文章

  1. 利用SOLR搭建企业搜索平台 之——模式配置Schema.xml

    来源:http://blog.csdn.net/awj3584/article/details/16963525 schema.xml这个配置文件可以在你下载solr包的安装解压目录的\solr\ex ...

  2. 利用SOLR搭建企业搜索平台 之——Solr索引基本操作

    来源:http://blog.csdn.net/zx13525079024/article/details/25367239 我们来看下通过界面来操作SOLR,包括SOLR索引的添加,查询等基本操作. ...

  3. 利用SOLR搭建企业搜索平台 之——solr的查询语法

      1. 首先假设我的数据里fields有:name, tel, address 预设的搜寻是name这个字段, 如果要搜寻的数据刚好就是 name 这个字段,就不需要指定搜寻字段名称. 2. 查询规 ...

  4. SOLR搭建企业搜索平台

    一. SOLR搭建企业搜索平台  运行环境:  运行容器:Tomcat6.0.20  Solr版本:apache-solr-1.4.0  分词器:mmseg4j-1.6.2  词库:sogou-dic ...

  5. 利用SOLR搭建企业搜索平台 之——MultiCore

    Solr Multicore 是 solr 1.3 的新特性.其目是一个solr实例,可以有多个搜索应用. 下面着手来将solr给出的一个example跑出来.这篇文章是基于<利用SOLR搭建企 ...

  6. 利用SOLR搭建企业搜索平台 之——配置文件

    运行solr是个很简单的事,如何让solr高效运行你的项目,这个就不容易了.要考虑的因素太多.这里很重要一个就是对solr的配置要了解.懂得配置文件每个配置项的含义,这样操作起来就会如鱼得水! 在so ...

  7. 利用SOLR搭建企业搜索平台 之——运行solr

    来源:http://blog.csdn.net/zx13525079024/article/details/24806131 本节主要介绍Solr的安装,其实Solr不需要安装.直接下载就可以了    ...

  8. SOLR企业搜索平台 一 (搭建SOLR)

    前提是已经安装了java的环境,环境变量的配置不做为讲解,网上也有大量资料.下面以linux为例来说明如何搭建好一个solr 1)首先下载solr,下载地址:http://mirror.bit.edu ...

  9. SOLR企业搜索平台 三 (schema.xml配置和solrj的使用)

    标签:solrj 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://3961409.blog.51cto.com/3951409/8 ...

随机推荐

  1. discuz之同步登入

    前言   首先感谢dozer学长吧UCenter翻译成C# 博客地址----------->http://www.dozer.cc/   其次感谢群友快乐々止境同学的热心指导,虽然萍水相逢但让我 ...

  2. Hdu 1009 FatMouse' Trade 分类: Translation Mode 2014-08-04 14:07 74人阅读 评论(0) 收藏

    FatMouse' Trade Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  3. IOS CoreData 多表查询demo解析

    在IOS CoreData中,多表查询上相对来说,没有SQL直观,但CoreData的功能还是可以完成相关操作的. 下面使用CoreData进行关系数据库的表与表之间的关系演示.生成CoreData和 ...

  4. 来自平时工作中的css知识的积累---持续补充中

    ① 现代浏览器中,<img>元素默认情况下底部会有空白,那么这个空白到底是从哪里来的? 解惑: method-one:猛戳 来自知乎的解答 method-two: 延伸阅读 what is ...

  5. depthstencil buffer 不支持 msaa

    phyreengine dx11 MRT不支持 depth rendertarget 的msaa 他里面竟然只写着,// not supported yet !!!! 导致hdao 时开msaa的话, ...

  6. .Net 命名(委托,事件==)

    委托及参数命名: public delegate void ClickedEventHandler(object sender, ClickedEventArgs e); ClickedEventHa ...

  7. C#单链表(数据结构)

    学习单链表的源码项目:http://files.cnblogs.com/xmfdsh/CSharp%E5%8D%95%E9%93%BE%E8%A1%A8.rar 链表是用一组任意的存储单元来存储线性表 ...

  8. 威胁远胜“心脏出血”?国外新爆Bash高危安全漏洞

    这几天Linux用户们可能不能愉快地玩耍了,红帽(Redhat)安全团队昨天爆出一个危险的Bash Shell漏洞.其带来的威胁可能比早前披露的“心脏出血”漏洞更大更强! [OpenSSL心脏出血漏洞 ...

  9. 对drupal的理解【转】

    写本文是想跟刚用drupal的朋友,分享一下心得,国内用drupal的太少了,希望大家能好好交流. 希望几分钟看完后你能马上上手drupal,至少能理解hook,api,theme,module,cc ...

  10. android 关于Location of the Android SDK has not been setup in the preferences的解决方法

    今天在部署android开发环境的时候,每次打开eclipse的时候点击AVD Manager的按钮就会弹出Location of the Android SDK has not been setup ...