Solr5之solrconfig.xml配置详解

solrconfig.xml 配置文件中包含了很多 solr 自身配置相关的参数 ,solrconfig.xml 配置文件示例可以从 solr

的解压目录下找到,如图:


用文本编辑软件打开 solrconfig.xml 配置,你将会看到以下配置内容:






<config>
  
  
  <luceneMatchVersion>5.1.0luceneMatchVersion>
  
  
  <dataDir>C:\solr_home\core1\datadataDir>
  
  <directoryFactory name="DirectoryFactory" 
      class="${solr.directoryFactory:solr.NRTCachingDirectoryFactory}">
  directoryFactory> 
  
  <codecFactory class="solr.SchemaCodecFactory"/>
  <schemaFactory class="ClassicIndexSchemaFactory"/>
  
  <indexConfig>
    
    <lockType>${solr.lock.type:native}lockType>
    
     <infoStream>trueinfoStream>
  indexConfig>
  
  <jmx />
  
  
  
  
  
  <updateHandler class="solr.DirectUpdateHandler2">
     
    <updateLog>
      <str name="dir">${solr.ulog.dir:}str>
    updateLog>
    
     <autoCommit> 
       <maxTime>${solr.autoCommit.maxTime:15000}maxTime> 
       <openSearcher>falseopenSearcher> 
     autoCommit>
    
     <autoSoftCommit> 
       <maxTime>${solr.autoSoftCommit.maxTime:-1}maxTime> 
     autoSoftCommit>
  updateHandler>
  
  <query>
    
    <maxBooleanClauses>1024maxBooleanClauses>
    
    
    <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"/>
     
    <cache name="perSegFilter"
      class="solr.search.LRUCache"
      size="10"
      initialSize="0"
      autowarmCount="10"
      regenerator="solr.NoOpRegenerator" />
    
    <enableLazyFieldLoading>trueenableLazyFieldLoading>
   
   <queryResultWindowSize>20queryResultWindowSize>
   
   <queryResultMaxDocsCached>200queryResultMaxDocsCached>
    
    <useColdSearcher>falseuseColdSearcher>
    
    <maxWarmingSearchers>2maxWarmingSearchers>
  query>
  
  <requestDispatcher handleSelect="false" >
     
    <requestParsers enableRemoteStreaming="true" 
      multipartUploadLimitInKB="2048000"
      formdataUploadLimitInKB="2048"
      addHttpRequestToContext="false"/>
    
    <httpCaching never304="true" />
  requestDispatcher>
  
  
  
  <requestHandler name="/dataimport" class="solr.DataImportHandler">
    <lst name="defaults">
      <str name="config">data-config.xmlstr>
    lst>
  requestHandler>
  <requestHandler name="/select" class="solr.SearchHandler">
    
     <lst name="defaults">
       <str name="echoParams">explicitstr>
       <int name="rows">10int>
     lst>
    requestHandler>
  
  <requestHandler name="/query" class="solr.SearchHandler">
     <lst name="defaults">
       <str name="echoParams">explicitstr>
       <str name="wt">jsonstr>
       <str name="indent">truestr>
       <str name="df">textstr>
     lst>
  requestHandler>
  
  <requestHandler name="/export" class="solr.SearchHandler">
    <lst name="invariants">
      <str name="rq">{!xport}str>
      <str name="wt">xsortstr>
      <str name="distrib">falsestr>
    lst>
    <arr name="components">
      <str>querystr>
    arr>
  requestHandler>
  <initParams path="/update/**,/query,/select,/tvrh,/elevate,/spell">
    <lst name="defaults">
      <str name="df">textstr>
    lst>
  initParams>
  
  <requestHandler name="/analysis/field" 
    startup="lazy"
    class="solr.FieldAnalysisRequestHandler" />
  
  <requestHandler name="/analysis/document" 
    class="solr.DocumentAnalysisRequestHandler" 
    startup="lazy" />
  
  <requestHandler name="/debug/dump" class="solr.DumpRequestHandler" >
    <lst name="defaults">
     <str name="echoParams">explicitstr> 
     <str name="echoHandler">truestr>
    lst>
  requestHandler>
  
  
  <searchComponent name="terms" class="solr.TermsComponent"/>
  
  <requestHandler name="/terms" class="solr.SearchHandler" startup="lazy">
     <lst name="defaults">
      <bool name="terms">truebool>
      <bool name="distrib">falsebool>
    lst>     
    <arr name="components">
      <str>termsstr>
    arr>
  requestHandler>
  
  <admin>
    <defaultQuery>*:*defaultQuery>
  admin>
config>

下面我将对其中关键地方加以解释说明:

lib

  标签指令可以用来告诉 Solr 如何去加载 solr plugins(Solr 插件 ) 依赖的 jar 包,在 solrconfig.xml 配置文件的注释中有配置示例,例如:

这里的 dir 表示一个 jar 包目录路径,该目录路径是相对于你当前 core 根目录的; regex 表示一个正则表达式,用来过滤文件名的,符合正则表达式的 jar 文件将会被加载

dataDir parameter

用来指定一个 solr 的索引数据目录, solr 创建的索引会存放在 data\index 目录下,默认 dataDir 是相对于当前 core 目录 ( 如果 solr_home 下存在 core 的话 ) ,如果 solr_home 下不存在 core 的话,那 dataDir 默认就是相对于 solr_home 啦,不过一般 dataDir 都在 core.properties 下配置。

/var/data/solr

codecFactory

用来设置Lucene倒排索引的编码工厂类,默认实现是官方提供的SchemaCodecFactory类。

indexConfig Section

在 solrconfig.xml 的 标签中间有很多关于此配置项的说明:

arr> listener>

QuerySenderListener 用来监听查询发送过程,即你可以在 Query 请求发送之前追加一些请求参数,如上面给的示例中,可以追加 qery 关键字以及 sort 排序规则。

设置为 false 即表示 Solr 服务器端不接收 /select 请求,即如果你请求 http://localhost:8080/solr/coreName/select?qt=xxxx 时,将会返回一个 404 ,

这个 select 请求是为了兼容先前的旧版本,已经不推荐使用。

表示 solr 服务器段永远不返回 304 ,那 http 响应状态码 304 表示什么呢?表示服务器端告诉客户端,你请求的资源尚未被修改过,我返回给你的是上次缓存的内容。 Never304 即告诉服务器,不管我访问的资源有没有更新过,都给我重新返回不走 Http 缓存。这属于 Http 协议相关知识,不清楚的请去 Google HTTP 协议详细了解去。

<requestHandler name="/query" class="solr.SearchHandler">
    <lst name="defaults">
      <str name="echoParams">explicitstr>
      <str name="wt">jsonstr>
      <str name="indent">truestr>
    lst>
  requestHandler>

这个 requestHandler 配置的是请求 URL  /query 跟请求处理类 SearcherHandler 之间的一个映射关系,即你访问 http://localhost:8080/solr/coreName/query?q=xxx 时,会交给 SearcherHandler 类来处理这个 http 请求,你可以配置一些参数来干预 SearcherHandler 处理细节,比如 echoParams 表示是否打印 HTTP 请求参数, wt 即 writer type, 即返回的数据的 MIME 类型,如 json,xml 等等, indent 表示返回的 json 或者 XML 数据是否需要缩进,否则返回的数据没有缩进也没有换行,不利于阅读。

其他的一些 requestHandler 说明就略过了,其实都大同小异,就是一个请求 URL 跟请求处理类的一个映射 , 就好比 SpringMVC 中请求 URL 和 Controller 类的一个映射。

用来配置查询组件比如 SpellCheckComponent 拼写检查,有关拼写检查的详细配置说明留到以后说到 SpellCheck 时再说吧。

用来返回所有的 Term 以及每个 document 中 Term 的出现频率

用来配置关键字高亮的, Solr 高亮配置的详细说明这里暂时先略过,这篇我们只是先暂时大致了解下每个配置项的含义即可,具体如何使用留到后续再深入研究。

有关 searchComponent 查询组件的其他配置我就不一一说明了,太多了。你们自己看里面的英文注释吧,如果你实在看不懂再来问我。

<queryResponseWriter name="json" class="solr.JSONResponseWriter">
    
    <str name="content-type">text/plain; charset=UTF-8str>
queryResponseWriter>

这个是用来配置 Solr 响应数据转换类, JSONResponseWriter 就是把 HTTP 响应数据转成 JSON 格式, content-type 即 response 响应头信息中的 content-type, 即告诉客户端返回的数据的 MIME 类型为 text/plain ,且 charset 字符集编码为 UTF-8.

内置的响应数据转换器还有 velocity , xslt 等,如果你想自定义一个基于 FreeMarker 的转换器,那你需要实现 Solr 的 QueryResponseWriter 接口,模仿其他实现类,你懂的,然后在 solrconfig.xml 中添加类似的

最后需要说明下的是 solrconfig.xml 中有大量类似

这样的自定义标签,下面做个统一的说明:


这张图摘自于 Solr in Action 这本书,由于是英文的,所以我稍微解释下:


arr: 即 array 的缩写,表示一个数组, name 即表示这个数组参数的变量名

lst 即 list 的缩写,但注意它里面存放的是 key-value 键值对

bool 表示一个 boolean 类型的变量 ,name 表示 boolean 变量名,

同理还有 int,long,float,str 等等

Str 即 string 的缩写,唯一要注意的是 arr 下的 str 子元素是没有 name 属性的,而 list 下的 str 元素是有 name 属性的

最后总结下:

solrconfig.xml 中的配置项主要分以下几大块:

1. 依赖的 lucene 版本配置,这决定了你创建的 Lucene 索引结构,因为 Lucene 各版本之间的索引结构并不是完全兼容的,这个需要引起你的注意。

2. 索引创建相关的配置,如索引目录, IndexWriterConfig 类中的相关配置 ( 它决定了你的索引创建性能 )

3.solrconfig.xml 中依赖的外部 jar 包加载路径配置

4.JMX 相关配置

5. 缓存相关配置,缓存包括过滤器缓存,查询结果集缓存, Document 缓存,以及自定义缓存等等

6.updateHandler 配置即索引更新操作相关配置

7.RequestHandler 相关配置,即接收客户端 HTTP 请求的处理类配置

8. 查询组件配置如 HightLight , SpellChecker 等等

9.ResponseWriter 配置即响应数据转换器相关配置,决定了响应数据是以什么样格式返回给客户端的。

10. 自定义 ValueSourceParser 配置,用来干预 Document 的权重、评分,排序

你可能感兴趣的:(搜索)