zoukankan      html  css  js  c++  java
  • 利用SOLR搭建企业搜索平台 之——solr配置solrconfig.xml


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

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

          可以在tomcat的安装路径下找到这个文件C:Program FilesApache Software FoundationTomcat 8.0solrcollection1conf

     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    

          

                   

  • 相关阅读:
    numpy 基础 —— np.linalg
    图像旋转后显示不完全
    opencv ---getRotationMatrix2D函数
    PS1--cannot be loaded because the execution of scripts is disabled on this system
    打开jnlp Faild to validate certificate, the application will not be executed.
    BATCH(BAT批处理命令语法)
    oracle vm virtualbox 如何让虚拟机可以上网
    merge 实现
    Windows batch,echo到文件不成功,只打印出ECHO is on.
    python2.7.6 , setuptools pip install, 报错:UnicodeDecodeError:'ascii' codec can't decode byte
  • 原文地址:https://www.cnblogs.com/renwei/p/4195628.html
Copyright © 2011-2022 走看看