solrconfig.xml 配置文件中包含了很多 solr 自身配置相关的参数 ,solrconfig.xml 配置文件示例可以从 solr
的解压目录下找到,如图:
<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
这里的 dir 表示一个 jar 包目录路径,该目录路径是相对于你当前 core 根目录的; regex 表示一个正则表达式,用来过滤文件名的,符合正则表达式的 jar 文件将会被加载
用来指定一个 solr 的索引数据目录, solr 创建的索引会存放在 data\index 目录下,默认 dataDir 是相对于当前 core 目录 ( 如果 solr_home 下存在 core 的话 ) ,如果 solr_home 下不存在 core 的话,那 dataDir 默认就是相对于 solr_home 啦,不过一般 dataDir 都在 core.properties 下配置。
用来设置Lucene倒排索引的编码工厂类,默认实现是官方提供的SchemaCodecFactory类。
在 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 中有大量类似 这样的自定义标签,下面做个统一的说明: 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 的权重、评分,排序
最后总结下: