solr学习笔记三:认识solr的配置文件

solr最基本的配置文件有solrconfig.xml和schema.xml和data-config.xml,位于${solr.solr.home}/core/conf目录下,你可以手动编辑xml文件,也可以通过web管理界面进行配置。刚开始接触的时候,你可以将整个example拷贝过来,里面包含了一些实例配置。

solrconfig.xml文件是solr的主配置文件,主要配置高亮、数据源、索引大小、索引合并等所有的索引策略。

schema.xml文件主要配置索引和查询的字段信息,定义了所有的数据类型和各索引字段的信息(如类型,是否建立索引,是否存储原始信息等)

data-config.xml是配置数据库信息,比如配置何种数据源datasource,全量索引,增量索引的数据库查询等。

SolrConfig.xml

solrconfig.xml包含了solr自身的一些参数,主要包括lib、数据目录、索引配置、更新处理、查询处理、缓存、请求分发、高亮等。具体的可以参考http://wiki.apache.org/solr/SolrConfigXml

要配置这个文件,建议是从example中拷贝一份做修改,可能修改的地方有:

lib:添加你自己需要引入的jar包目录

dataDir:修改为你自己定义的数据存放目录,比如

/var/data/solr

directoryFactory:目录工厂(主要指的是索引存储),一般就用NRTCachingDirectoryFactory,准实时索引,将部分索引缓存在内存中,加快访问速度。根据需要也可以配置为其它,详细可参考《solr学习笔记:了解DirectoryFactory

codeFactory:允许你自己定义编解码器(用来倒排索引的格式),默认的是SchemaCodecFactory,关于倒排索引的介绍可以看这里

indexConfig:配置关于创建索引的一些参数,待续

updateHandler:配置solr内部如何处理更新,待续

indexReaderFactory:用来指定IndexReader的实现

query:配置查询相关,主要有缓存、事件监听等(newSearcher、firstSearcher)

requestDispatcher:配置Solr的HTTP请求分发,比如HTTP请求解析、远程流支持、文件上传最大尺寸等,还包含了http缓存的配置(比如304响应、max-age等)

requestHandler:注册各种类型的请求处理方式,比如select、update、query等

searchComponent:配置搜索相关组件,比如查询、facet、相似检索、高亮、统计、调试等等

updateRequestProcessorChain:配置在索引前对document的处理链

queryResponseWriter:配置查询响应的Writer,比如配置XML、JSON、python、ruby、csv等输出格式以及响应的content-type等

queryParser:配置查询解析器,可以将一些文本的查询解析为Lucene查询对象

admin:web管理界面相关的一些配置

Schema.xml

schema.xml文件包含了文档中字段的详细信息,以及在添加索引、查询的时候这些字段被如何处理。

field:声明Document中的每一个字段,包含name、type、indexed(是否索引) 、stored(存储以便可以被检索到)、compressed(是否被gzip压缩,只有部分类型可以)、multiValued(是否包含多个值)、omitNorms(字段的长度不影响得分和在索引时不做boost时,设置它为true。一般文本字段不设置为true)等。

uniqueKey:唯一的值,表示这个字段在索引中是唯一的,如果添加一条相同的内容到Document,则会删除旧的内容。

defaultSearchField:默认的搜索字段,不建议使用(过期),建议在reeuestHandler中设置或者查询串中指定。

solrQueryParser:指明slor查询解析,主要有一个属性defaultOperator=AND|OR,默认是OR,也是不建议使用的,建议在reeuestHandler中设置或者查询串中指定。

dynamicField:动态字段允许solr索引没有在schema中明确定义的字段。这个在忘记定义一些字段时很有用。动态字段可以让系统更灵活,通用性更强。动态字段和常规字段类似,除了它名字中包含一个通配符外,在索引文档时,一个字段如果在常规字段中没有匹配时,将到动态字段中匹配。假设schema中定义了一个叫*_i的动态动态字段,如果要索引一个叫cost_i的字段,但是schema中不存在cost_i的字段,这样cost_i将被索引到*_i字段中。

copyField:你可能想让document的一些字段可以多次使用。solr有一个字段复制机制,可以提交多个不同类型字段集中到一个字段。字段复制主要涉及两个概念:source和destination,一个是要复制的字段,另一个是要复制到哪个字段,copyField的主要属性有:source、dest、maxChars,其中source和dest都支持通配符。

fieldType:字段类型,可以根据需要自定义字段类型,一般大多数类型用example中的即可,中文可能需要自己定义,fieldType可以分别针对index或query自定义analyzer,中文analyzer可以选择IKAnalyzer或者庖丁分词器。analyzer中可以配置tokenizer和filter,详细参考

similarity:相似度,评分相关的就可以配置这个参数。可以配置成global,也可以在某个fieldType下配置。这个参数配置时属性class可以指定为具体的某个无参的constructor或者某个similarityFactory,比如SchemaSimilarityFactory。 如果没有similarity配置,则使用默认的DefaultSimilarityFactory。

参考资料:

官方文档SchemaXml:http://wiki.apache.org/solr/SchemaXml

官方文档SolrConfigXml:http://wiki.apache.org/solr/SolrConfigXml

有关Field、CopyField、DynamicField的介绍:http://blog.csdn.net/zl3450341/article/details/12849341

关于solr schema.xml 和solrconfig.xml的解释:http://www.blogjava.net/conans/articles/379545.html