Solr schema.xml文件

schema.xml是Solr中用户定义字段类型及字段的配置文件
 
一、types节点
 
在节点<types> 中定义 <fieldType>子节点
 
包含属性:
name: FieldType的名称
class: 指向org.apache.solr.analysis包里面对应的class名称,用来定义这个类型的行为
omitNorms: 字段检索时被省略相关的规范
positionIncrementGap:定义在同一个文档中此类型数据的空白间隔,避免短语匹配错误
 
此外还可以建立索引和进行查询的时候要使用的分析器analyzer
 
<schema name="example" version="1.2"> 
<types> 
<fieldType name="int" class="solr.TrieIntField" precisionStep="0" omitNorms="true" positionIncrementGap="0" /> 
<fieldType name="float" class="solr.TrieFloatField" precisionStep="0" omitNorms="true" positionIncrementGap="0" /> 
<fieldType name="double" class="solr.TrieDoubleField" precisionStep="0" omitNorms="true" positionIncrementGap="0" /> 
<fieldType name="string" class="solr.StrField" sortMissingLast="true" omitNorms="true" /> 
<fieldType name="text" class="solr.TextField" positionIncrementGap="100"> 
<analyzer> 
<tokenizer class="solr.WhitespaceTokenizerFactory" /> 
</analyzer> 
</fieldType> 
</types> 
 
......
</schema> 
 
二、fields节点
 
<fields>节点下包含子节点<field>
 
包含属性:
name 字段名字
 
default
    -字段的默认值
indexed=true|false
    -被索引,如果一个字段设为true,那么它可一进行: earchable, sortable, facetable
stored=true|false
    -true 则字段应当可检索
compressed=true|false
    -true 使用gzip压缩存储(只适用 compressable;TextField和StrField)
compressThreshold=<integer>
    -保证压缩到不小于一个大小
multiValued=true|false
    -字段是否可以多个值
omitNorms=true|false
    -true 则字段检索时被省略相关的规范
omitTermFreqAndPositions=true|false
    -true 省略这一领域的长远频率,位置和有效载荷
    
<fields> 
<field name="user_id" type="string" indexed="true" stored="true" required="true" /> 
<field name="name" type="string" indexed="true" stored="true" /> 
<field name="phone" type="string" indexed="false" stored="true" /> 
<field name="email" type="string" indexed="false" stored="true" /> 
<field name="image" type="string" indexed="false" stored="true" /> 
<field name="city_id" type="int" indexed="true" stored="true" /> 
<field name="address" type="string" index="false" stored="true" /> 
<field name="created" type="int" index="false" stored="true" /> 
<field name="all" type="string" index="true" stored="true" />
</fields> 
    
 2.dynamicField 动态字段
动态字段,没有具体名称的字段
name为*_i,定义它的type为int,那么在使用这个字段的时候,任务以_i结果的字段都被认为符合这个定义。如name_i, school_i
 
<dynamicField name="*_i"  type="int"    indexed="true"  stored="true"/>
<dynamicField name="*_s"  type="string"  indexed="true"  stored="true"/>
 
三、 uniqueKey 设置字段惟一
<uniqueKey>user_id</uniqueKey>  
    
四、默认搜索字段
<defaultSearchField>name</defaultSearchField>
 
五、默认搜索类型
<solrQueryParser defaultOperator="AND|OR" /> 
 
六、copyField 拷贝到另一个字段
<copyField source="name" dest="all"/>
<copyField source="email" dest="all" />
 
schema.xml 例子:
<?xml version="1.0" encoding="UTF-8" ?> 
 
<schema name="example" version="1.2"> 
<types> 
<fieldType name="int" class="solr.TrieIntField" precisionStep="0" omitNorms="true" positionIncrementGap="0" /> 
<fieldType name="float" class="solr.TrieFloatField" precisionStep="0" omitNorms="true" positionIncrementGap="0" /> 
<fieldType name="double" class="solr.TrieDoubleField" precisionStep="0" omitNorms="true" positionIncrementGap="0" /> 
<fieldType name="string" class="solr.StrField" sortMissingLast="true" omitNorms="true" /> 
<fieldType name="text" class="solr.TextField" positionIncrementGap="100"> 
<analyzer> 
<tokenizer class="solr.WhitespaceTokenizerFactory" /> 
</analyzer> 
</fieldType> 
</types> 
 
<fields> 
<field name="user_id" type="string" indexed="true" stored="true" required="true" /> 
<field name="name" type="string" indexed="true" stored="true" /> 
<field name="phone" type="string" indexed="false" stored="true" /> 
<field name="email" type="string" indexed="false" stored="true" multiValued="true" /> 
<field name="image" type="string" indexed="false" stored="true" /> 
<field name="city_id" type="int" indexed="true" stored="true" /> 
<field name="address" type="string" index="false" stored="true" /> 
<field name="created" type="int" index="false" stored="true" /> 
<field name="all" type="string" index="true" stored="true" />
 
<dynamicField name="*_i"  type="int"    indexed="true"  stored="true"/>
<dynamicField name="*_s"  type="string"  indexed="true"  stored="true"/>
</fields> 
 
<uniqueKey>user_id</uniqueKey> 
<defaultSearchField>name</defaultSearchField> 
 
<copyField source="name" dest="all" />
<copyField source="phone" dest="all" />
<copyField source="email" dest="all" />
</schema> 
 

猜你喜欢

转载自shiguanghui.iteye.com/blog/2034109