solrconfig.xml配置文件主要定义了SOLR的一些处理规则,包括索引数据的存放位置,更新,删除,查询的一些规则配置。
索引存储方案,共有以下存储方案
1、solr.StandardDirectoryFactory,这是一个基于文件系统存储目录的工厂,它会试图选择最好的实现基于你当前的操作系统和Java虚拟机版本。
2、solr.SimpleFSDirectoryFactory,适用于小型应用程序,不支持大数据和多线程。
3、solr.NIOFSDirectoryFactory,适用于多线程环境,但是不适用在windows平台(很慢),是因为JVM还存在bug。
4、solr.MMapDirectoryFactory,这个是solr3.1到4.0版本在linux64位系统下默认的实现。它是通过使用虚拟内存和内核特性调用mmap去访问存储在磁盘中的索引文件。它允许lucene或solr直接访问I/O缓存。如果不需要近实时搜索功能,使用此工厂是个不错的方案。
5、solr.NRTCachingDirectoryFactory,此工厂设计目的是存储部分索引在内存中,从而加快了近实时搜索的速度。
6、solr.RAMDirectoryFactory,这是一个内存存储方案,不能持久化存储,在系统重启或服务器crash时数据会丢失。且不支持索引复制
编解码工厂允许使用自定义的编解码器。例如:如果想启动per-field DocValues格式, 可以在solrconfig.xml里面设置SchemaCodecFactory:
docValuesFormat="Lucene42": 这是默认设置,所有数据会被加载到堆内存中。
docValuesFormat="Disk": 这是另外一个实现,将部分数据存储在磁盘上。
docValuesFormat="SimpleText": 文本格式,非常慢,用于学习。
用于设置索引的低级别的属性
1、
2、
3、
4、
5、
6、
7、
//合并策略。
8、
9、
10、
11、
12、
13、
14、
15、
16、
17、
18、
设置索引库的锁方式,主要有三种:
1. single:适用于只读的索引库,即索引库是定死的,不会再更改
2. native:使用本地操作系统的文件锁方式,不能用于多个solr服务共用同一个索引库。Solr3.6 及后期版本使用的默认锁机制。
3. simple:使用简单的文件锁机制
设置索引库更新日志,默认路径为solr home下面的data/tlog。随着索引库的频繁更新,tlog文件会越来越大,所以建议提交索引时采用硬提交方式
自动硬提交方式:maxTime:设置多长时间提交一次maxDocs:设置达到多少文档提交一次openSearcher:文档提交后是否开启新的searcher,如果false,文档只是提交到index索引库,搜索结果中搜不到此次提交的文档;如果true,既提交到index索引库,也能在搜索结果中搜到此次提交的内容。
设置boolean 查询中,最大条件数。在范围搜索或者前缀搜索时,会产生大量的 boolean 条件,如果条件数达到这个数值时,将抛出异常,限制这个条件数,可以防止条件过多查询等待时间过长。
multipartUploadLimitInKB="2048000" formdataUploadLimitInKB="2048"/> schema.xml文件里面主要定义了索引数据类型,索引字段等信息。 fieldtype节点主要用来定义数据类型。 name指定的是节点定义的名称 class指向org.apache.solr.analysis中定义的类型名称 fieldtype还可以自己定义当前类型建立索引和查询数据的时候使用的查询分析器。 tokenizer指定分词器 filter指定过滤器 positionIncrementGap:可选属性,定义在同一个文档中此类型数据的空白间隔,避免短语匹配错误。 positionIncrementGap=100 只对 multiValue = true 的fieldType有意义。 StrField类型不被分析,而是被逐字地索引/存储 solr.TextField 允许用户通过分析器来定制索引和查询,分析器包括一个分词器(tokenizer)和多个过滤器(filter) field节点指定建立索引和查询数据的字段。 name代表数据字段名称 type代表数据类型,也就是之前定义的fieldtype indexed代表是否被索引 stored代表是否被存储 multiValued是否有多个值,如果字段可能有多个值,尽可能设为true _version节点和root节点是必须保留的,不能删除 通过这个节点,可以把一个字段的值复制到另一个字段中,也可以把多个字段的值同时复制到另一个字段中,这样搜索的时候都可以根据一个字段来进行搜索。 dynamicField 表示动态字段,可以动态定义一个字段,只要符合规则的字段都可以。 *_i只要以_i结尾的字段都满足这个定义。 uniquekey节点是文档的唯一标示,相当于主键,每次更新,删除的时候都根据这个字段来进行操作。必须填写。 defaultSearchField指定搜索的时候默认搜索字段的值。 solrQueryParser指定搜索时多个词之间的关系,可以是or,and两种。 1、将所有只用于搜索的,而不需要作为结果的field(特别是一些比较大的field)的stored设置为false; 2、将不需要被用于搜索的,而只是作为结果返回的field的indexed设置为false; 3、删除所有不必要的copyField声明为了索引字段的最小化和搜索的效率; 4、将所有的 text fields的index都设置成false,然后使用copyField将他们都复制到一个总的text field上,然后进行搜索。 2. schema.xml
2.1. fieldtype
2.2. field
2.3. copyfield
2.4. dynamicField
2.5. uniquekey
2.6. defaultSearchField
2.7. solrQueryParser
2.8. 性能优化