首先看solr的配置文件的tree树文件:
| + conf
| - schema.xml
| - solrconfig.xml
| - stopwords.txt etc
| + data
| - index
| - spelllchecker
schema.xml(字段配置)
该配置文件主要用于配置数据源,字段类型定义,搜索类型定义等,是加载数据,创建索引和数据时的核心数据结构的配置文件。
solr的数据结构如下:
document:一个文档、一条记录
field:域、属性
solr通过搜索某个或某些field,返回若干个符合条件的document,或者按搜索的score排序返回。
如果跟数据库对比,document相当于数据库的表,field相当于表中的字段。而schema.xml就是为了定义一个表的结构(定义各个field的名字、类型、约束、等等)。
schema.xml的基本结构如下:
常用的配置说明:
field:定义一个document中的各个fields
name:必填。该field的名字。前后都有下划线的name是系统保留的名字,比如“_version_”
type:必填。类型,对应于fieldType的name
default:该field的缺省值
indexed:true/false,是否为该field建立索引,以让用户可以搜索它、统计它(facet)
stored:true/false,定义这个field是否可以返回给查询者
multiValued:true/false,是否可以容纳多个值(比如多个copyField的dest指向它)。如果是true,则该field不能被排序、不能作为uniqueKey
required:true/false,告诉solr这个field是否接受空值,缺省为false
docValues:true/false,建立document-to-value索引,以提高某些特殊搜索的效率(排序、统计、高亮)
copyField:把一个field的内容拷贝到另外一个field中。一般用来把几个不同的field copy到同一个field中,以方便只对一个field进行搜索
source:被拷贝的field,支持用通配符指定多个field,比如:*_name
dest:拷贝到的目的field
maxChars:最大字符数
uniqueKey:指定一个field为唯一索引
fieldType:定义field的类型,包括下面一些属性
name:必填,被field配置使用
class:必填,filedType的实现类。solr.TextField是路径缩写,"等价于"org.apache.solr.schema.TextField"
multiValued:?
positionIncrementGap:指定mutiValued的距离
ananlyzer:如果class是solr.TextField,这个配置是必填的。告诉solr如何处理某些单词、如何分词,比如要不要去掉“a”,要不要全部变成小写……
type:index或query
tokenizer:分词器,比如:StandardTokenizerFactory
filter:过滤器,比如:LowerCaseFilterFactory
dynamicField:用通配符定义一个field来存在没有被field定义的漏网之鱼
name:使用通配符,比如“*_i”,来处理类似“cost_i”之类的field
参考:http://blog.csdn.net/clementad/article/details/47666043
solrconfig.xml(索引配置和查询处理配置)
solrconfig.xml配置文件主要定义了SOLR的一些处理规则,包括索引数据的存放位置,更新,删除,查询的一些规则配置。
datadir 节点:dataDir>${solr.data.dir:d:/Server/Solr/data} 定义了索引数据和日 志文件的存放位置
luceneMatchVersion:
lib:
directoryFactory: 索引存储方案,共有以下存储方案
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 时数据会丢失。且不支持索引复制
codecFactory:编解码工厂允许使用自定义的编解码器。例如:如果想启动 per-fieldDocValues 格式, 可以在 solrconfig.xml 里面设置 SchemaCodecFactory: docValuesFormat="Lucene42": 这是默认设置,所有数据会被加载到堆内存中。 docValuesFormat="Disk": 这是另外一个实现,将部分数据存储在磁盘上。 docValuesFormat="SimpleText": 文本格式,非常慢,用于学习。
indexconfig:
用于设置索引的低级别的属性
1. single:适用于只读的索引库,即索引库是定死的,不会再更改
2. native:使用本地操作系统的文件锁方式,不能用于多个 solr 服务共用同一个 索引库。Solr3.6 及后期版本使用的默认锁机制。
3. simple:使用简单的文件锁机制
updateHandler:
设置索引库更新日志,默认路径为 solrhome 下面的 data/tlog。随着索引库的频 繁更新,tlog 文件会越来越大,所以建议提交索引时采用硬提交方式 ,即批量提交。
Query :查询
RequestDispatcher 请求转发器
参考:http://www.voidcn.com/blog/zeb_perfect/article/p-6000171.html
http://www.luoshengsha.com/197.html
dataconfig.xml(数据源配置)
参考:http://flyingsnail.blog.51cto.com/5341669/1575075