solrconfig.xml配置文件中包含了很多solr自身配置相关的参数,solrconfig.xml配置文件示例可以从solr的解压目录下找到,如图:
用文本编辑软件打开solrconfig.xml配置,你将会看到以下配置内容:
5.1.0 C:\solr_home\core1\data ${solr.lock.type:native} true ${solr.ulog.dir:} ${solr.autoCommit.maxTime:15000} false ${solr.autoSoftCommit.maxTime:-1} 1024 true 20 200 false 2 data-config.xml explicit 10 explicit json true text {!xport} xsort false query text explicit true true false terms *:*
下面我将对其中关键地方加以解释说明:
lib
这里的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下配置。
codecFactory
用来设置Lucene倒排索引的编码工厂类,默认实现是官方提供的SchemaCodecFactory类。
indexConfig Section
在solrconfig.xml的
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配置的是请求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查询组件的其他配置我就不一一说明了,太多了。你们自己看里面的英文注释吧,如果你实在看不懂再来问我。 这个是用来配置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的权重、评分,排序 solrconfig.xml就解释到这儿了,理解这些配置项是为后续Solr学习扫清障碍。有些我没说到的或者我有意略过的,就留给你们自己去阅读和理解了,毕竟内容太多,1000多行的配置,一行不拉的解释完太耗时,有些都是类似的配置,我想你们应该能看懂。 如果你还有什么问题请加我Q-Q:7-3-6-0-3-1-3-0-5, 或者加裙
这张图摘自于Solr in Action这本书,由于是英文的,所以我稍微解释下:
一起交流学习!