开篇
Solr安装完成后在conf目录下有一个schema.xml文件,这其中是solr使用时需要的核心数据结构的配置,包括数据源,字段类型定义,搜索类型定义等。schema.xml的基结构如下:
<schema>
< fieldType ></ fieldType >
< field ></field >
<copyField></copyField>
<dynamicField ></ dynamicField >
<uniqueKey></uniqueKey>
</schema>
正文
fieldType:定义field的类型,包括下面一些属性
示例:
<fieldType name="text_general"class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory"ignoreCase="true" words="stopwords.txt" />
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
- 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
field:字段(Field)是构成Document的基本单元,定义一个document中的各个fields
示例:
<field name="title" type="text_general" indexed="true"stored="true" multiValued="true"/>
<field name="subject" type="text_general" indexed="true"stored="true"/>
<field name="description" type="text_general"indexed="true" stored="true"/>
<field name="comments" type="text_general"indexed="true" stored="true"/>
- name:必填。该field的名字。前后都有下划线的name是系统保留的名字,比如“_version_”
- type:必填。类型,对应于fieldType的name
- 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中。一般用来把几个不同的fieldcopy到同一个field中,以方便只对一个field进行搜索。
示例:
<copyField source="title" dest="text"/>
<copyField source="author" dest="text"/>
<copyField source="description" dest="text"/>
- source:被拷贝的field,支持用通配符指定多个field,比如:*_name
- dest:拷贝到的目的field
- maxChars:最大字符数
dynamicField:用通配符定义一个field来存在没有被field定义的漏网之鱼
示例:
<dynamicField name="*_i" type="int" indexed="true"stored="true"/>
<dynamicField name="*_is"type="int" indexed="true" stored="true"multiValued="true"/>
<dynamicField name="*_s" type="string" indexed="true" stored="true" />
- name:使用通配符,比如“*_i”,来处理类似“cost_i”之类的field
uniqueKey:指定一个field为唯一索引
示例:
<uniqueKey>id</uniqueKey>
小结
该配置文件中要有默认的配置,在这里面我们可以添加自定义的配置,下篇博客看一下实际要应用。