Solr5配置文件参数解析
文章目录
Solr5的主要配置文件有solrconfig.xml
和managed-schema
,另外一些还有solr.xml
,数据导入配置
,ZooKeeper配置
等。
这里详细介绍两个主要的配置文件。
solrconfig.xml
solrconfig.xml文件是solr的主配置文件,主要配置高亮、数据源、索引大小、索引合并等所有的索引策略。
该文件位于$SolrHome/$Core/conf
文件夹中,这个配置包含了solr自身的一些参数,主要包括lib、数据目录、索引配置、更新处理、查询处理、缓存、请求分发、高亮等。可参考官方文档:Configuring solrconfig.xml,以下内容整理自系统全面的认识Solr。
<luceneMatchVersion>
声明使用的lucene的版本。
<lib>
配置solr用到的jar包,具体语法示例中基本都有了。
<dataDir>
如果不用 $SolrHome/data
目录,可以指定其它别的目录来存放所有索引数据。如果使用了 replication,它可以匹配 replication 配置。如果这个目录不是绝对的,那会是当前 servlet 容器工作目录下的相对目录。
<directoryFactory>
索引文件的类型,默认solr.NRTCachingDirectoryFactory
这个文件类型包装了solr.StandardDirectoryFactory
和小文件内存缓存的类型,来提供NRT搜索性能。NRT(near-real-time)近实时。
<indexConfig>
主要索引相关配置
<writeLockTimeout>
IndexWriter写锁过时的时间,默认1000
<maxIndexingThreads>
最大索引的线程数,默认8
<useCompoundFile>
是否使用混合文件,Lucene默认是true
,solr默认是false
<ramBufferSizeMB>
使用的内存的大小,默认100,这个实际用的时候应该修改大一点。
<ramBufferdDocs>
内存中最大的文档数,默认1000
<mergePolicy>
索引合并的策略。默认TiereMergePolicy
,合并大小相似的段,与LogByteSizeMergePolicy
相似。这个可以合并不相邻的段,能够设置一次合并多少个段,maxMergeAtOnce
以及每层能合并多少个段segmentsPerTier
。
<mergeFactor>
每次合并索引的时候获取多少个段,默认10。等同于同时设置了maxMergeAtOnce
和segmentsPerTier
两个参数。
<mergeScheduler>
段合并器,背后有一个线程负责合并,默认ConcurrentMergeScheduler
。
<lockType>
文件锁的类型,默认native
,使用NativeFSLockFactory
。
<unlockOnStartup>
默认false
<termIndexInterval>
Lucene每次加载到内存的terms数,默认128
<reopenReaders>
如果是true
时,IndexReaders
能够被reopened,而不是先关闭再打开,默认true
<deletionPolicy>
删除策略,用户可以自己定制,solr默认的是SolrDeletionPolicy
,是solr标准的删除策略,允许在一定时间内保存索引提交点,来支持索引复制,以及快照等特性。可以设置maxCommitsToKeep
保存提交的数量、maxOptimizedCommitsToKeep
保存的优化条件的数量、maxCommitAge
删除所有commit points的时间。
<infoStream>
为了调试,Lucene提供了这个参数,如果是true
的话,IndexWriter
会像设置的文件中写入debug信息。
<jmx>
一般不需要设置具体可以查看wiki文档
<updateHandler>
更新的Handler,默认DirectUpdateHandler2
<updateLog><str name="dir">
配置更新日志的存放位置
<autoCommit>
硬自动提交,可以配置maxDocs即从上次提交后达到多少文档后会触发自动提交;maxTime时间限制;openSearcher,如果设为false,导致索引变化的最新提交,不需要重新打开searcher就能看到这些变化,默认false。
<autoSoftCommit>
如自动提交,与前面的<autuCommit>
相似,但是它只是让这些变化能够看到,并不保证这些变化会同步到磁盘上。这种方法比硬提交要快,而且更接近实时更友好。
<listerner event>
update
时间监听器配置,postCommit
每一次提交或优化命令后触发,
poatOptimize
每次优化命令后触发。RunExecutableListener
每次调用后执行一些其他操作。配置项:
<indexReaderFactory>
这个配置项用户可以自己扩展IndexReaderFactory
,可以自己实现自己的
IndexReader
。如果要明确声明使用的Factory则可以如下配置:
<query>
配置检索词相关参数以及缓存配置参数。
<maxBooleanClauses>
每个BooleanQuery中最大Boolean Clauses的数目,默认1024。
<filterCache>
为IndexSearcher
使用,当一个IndexSearcher
Open时,可以被重新赋于原来的值,或者使用旧的IndexSearcher
的值,例如使用LRUCache时,最近被访问的Items将被赋予IndexSearcher
。solr默认是FastLRUCache
。
cache介绍:http://blog.csdn.net/phinecos/article/details/7876385 filterCache存储了无序的lucene documentid集合,该cache有3种用途: 1)filterCache存储了filterqueries(“fq”参数)得到的document id集合结果。Solr中的query参数有两种,即q和fq。如果fq存在,Solr是先查询fq(因为fq可以多个,所以多个fq查询是个取结果交集的过程),之后将fq结果和q结果取并。在这一过程中,filterCache就是key为单个fq(类型为Query),value为document id集合(类型为DocSet)的cache。对于fq为range query来说,filterCache表现出其有价值的一面。 2)filterCache还可用于facet查询,facet查询中各facet的计数是通过对满足query条件的documentid集合(可涉及到filterCache)的处理得到的。因为统计各facet计数可能会涉及到所有的doc id,所以filterCache的大小需要能容下索引的文档数。 3)如果solfconfig.xml中配置了
<useFilterForSortedQuery/>
,那么如果查询有filter(此filter是一需要过滤的DocSet,而不是fq,我未见得它有什么用),则使用filterCache
。
<queryResultCache>
缓存查询的结果集的docs的id。
<documentCache>
缓存document对象,因为document中的内部id是transient,所以autowarmed为0,不能被autowarmed。
<fieldValueCache>
字段缓存
<cache name="">
用户自定义一个cache,用来缓存指定的内容,可以用来缓存常用的数据,或者系统级的数据,可以通过SolrIndexSearcher.getCache()
,cacheLookup()
, and cacheInsert()
等方法来操作。
<enableLazyFieldLoading>
保存的字段,如果不需要的话就懒加载,默认true。
<useFilterForSortedQuery>
一般来讲用不到,只有当你频繁的重复同一个搜索,并且使用不同的排序,而且它们都不用“score”
<queryResultWindowSize>
queryResultCache的一个参数。
<queryResultMaxDocsCached>
queryResultCache的一个参数。
<listener event"newSearcher" class="solr.QuerySenderListener">
query的事件监听器。
<useColdSearcher>
当一个检索请求到达时,如果现在没有注册的searcher,那么直接注册正在预热的searcher并使用它。如果设为false则所有请求都要block,直到有searcher完成预热。
<maxWarmingSearchers>
后台同步预热的searchers数量。
<requestDispatcher handleSelect="false">
solr接受请求后如何处理,推荐新手使用false
<requestParsers enableRemoteStreaming="true" multipartUploadLimitInKB="2048000" formdataUploadLimitInKB="2048" />
使系统能够接收远程流。
<httpCaching never304="true">
http cache参数,solr不输出任何HTTP Caching相关的头信息。
<requestHandler>
接收请求,根据名称分发到不同的handler。
|
|
<searchComponent>
注册searchComponent。
<queryResponseWriter>
返回数据
<admin> <defaultQuery>
默认的搜索词
managed-schema
managed-schema在solr5之前叫schema.xml,文件主要配置索引和查询的字段信息,定义了所有的数据类型和各索引字段的信息(如类型,是否建立索引,是否存储原始信息等)。
fields块配置
|
|
- name:名称
- type:类型从
的fieldType中取 - indexed:是否索引
- stored:是否保存
- required:是否必须
- multiValuer:在同一篇文档中可以有多个值
- omitNorms:true的话忽略norms
- termVectors:默认false,如果是true的话,要保存字段的term vector
- termPositions:保存term vector的位置信息
- termOffects:保存term vector的偏移信息
- default:字段的默认值
<dynamicField>
动态字段,当不确定字段名称时采用这种配置
<CopyField>
types块配置
<types>
块内,声明一系列的 <fieldtype>
,以 Solr fieldtype类为基础,如同默认选项一样来配置自己的类型。
任何 FieldType
的子类都可以作为 field type
来使用,使用时可以用完整的包名,如果field type
类在 solr 里,那可以用 “solr”代替包名。提供多种不同实现的普通数据类型(integer, float等)。想知道怎么样被 Solr 正确地加载自定义的数据类型,请看:SolrPlugins
通用的选项有:
- name:类型名称
- class:对应于solr fieldtype类
- sortMissingLast=true|false 如果设置为true,那么对这个字段排序的时候,包含该字段的文档就排到不包含该字段的文档前面。
- sortMissingFirst=true|false 如果设置为true,那么对这个字段排序的时候,没有该字段的文档排在包含该字段的文档前面
- precisionStep 如何理解precisionStep呢?需要一步一步来: 参考文档:http://blog.csdn.net/fancyerii/article/details/7256379
- precisionStep是在做range search的起作用的,默认值是4
- 数值类型(int float double)在Lucene里都是以string形式存储的,当然这个string是经过编码的
- 经过编码后的string保证是顺序的,也就是说num1>num2,那么strNum1>strNum2
- precisionStep用来分解编码后的string,例如有一个precisionStep,默认是4,也就是隔4位索引一个前缀,比如0100,0011,0001,1010会被分成下列的二进制位“0100,0011,0001,1010“,”0100,0011,0001“,0100,0011“,”0100“。这个值越大,那么索引就越小,那么范围查询的性能(尤其是细粒度的范围查询)也越差;这个值越小,索引就越大,那么性能越差。
- positionIncrementGap和multiValued一起使用,设置多个值之间的虚拟空白的数量。字段有多个值时使用,如果一篇文档有两个title
title1: ab cd title2: xy zz
如果positionIncrementGap=0,那么这四个term的位置为0,1,2,3。如果检索"cd xy"那么能够找到,如果你不想让它找到,那么就需要调整positionIncrementGap值。如100,那么这是位置为0,1,100,101。这样就不能匹配了。
<fieldType name="random" class="solr.RandomSortField" indexed="true" />
这个字段类型可以实现伪随机排序。
analyzer配置 包括tokenizer和filter,可以配置多个filter
其他配置
<uniqueKey>
唯一字段,除非这个字段标记了“required=false”,否则默认为required字段
<copyField>
一个源字段一个目的字段,将源字段的内容拷贝到目的字段,可以将多个字段合并,也可以对同一个字段,不同索引方式。
<defaultSearchField>
默认的搜索字段
<solrQueryParser defaultOperator="OR"/>
默认的检索词间的关系
数据导入配置
这个配置文件的名字是在solrconfig.xml
中配置的,不过通常我们用data-config.xml
这个名字,它是配置数据库信息,比如配置何种数据源datasource,全量索引,增量索引的数据库查询等。
由于这个配置项要讲的东西较多,单独在导入Mysql数据到Solr中中讲解。
solr.xml
solr.xml主要是配置solr主目录中的索引库即SolrCore,一个solr服务可以配置多个SolrCore,即可以管理多个索引库。
|
|
这是默认的内容,一般情况下不需要更改这里的东西,并且我也没怎么理解,所以等到我明白了再说。