可参考配置:http://wiki.apache.org/solr/SchemaXml(基本上文档上面讲的已经很详细了)
先来看一下Schema.xml都有什么配置
1,uniqueKey
2,n多name不一样的fieldType
3,各种field :field,dynamicField,copyField
4,默认被注释掉的defaultSearchField,solrQueryParser,Similarity
下面来看一下具体都什么意思:
1,uniqueKey:文档的唯一标识、唯一键,这里配置的是下面出现的field 一般都叫id,在更新、删除的时都会用到
<uniqueKey>id</uniqueKey>
2,fieldType:是一些常见的可重用定义,定义了 Solr如何处理 Field。也就是添加到索引中的xml文件属性中的类型,如int、text、date等.
属性说明:
name # 标识,与Field type对应 class #对应solr已定义的type Class sortMissingLast #设置成true没有该field的数据排在有该field的数据之后,而不管请求时的排序规则, 默认是false。 sortMissingFirst #反之,默认是false analyzer #字段类型指定的分词器tokenizer #分词器类type #当前分词用用于的操作.index代表生成索引时使用的分词器query代码在查询时使用的分词器 filter #分词后使用的过滤器,调用顺序和配置相同
3,Fields 就是定义那些你要在搜索结果中展示的字段,即在doucument中使用,用于搜索或者只是展示
field: 普通的字段设置
<field name="sn" type="string" indexed="true" stored="true" />
dynamicField: 动态的字段设置,用于后期自定义字段,*号通配符.例如: test_i就是int类型的动态字段.
<dynamicField name="*_i" type="integer" indexed="true" stored="true"/>
copyField: 一般用于检索时用的字段,这样就只对这一个字段进行索引分词,copyField的dest字段如果有多个source一定要设置multiValued=true,否则会报错的
<copyField source="body" dest="teaser" maxChars="300"/>
fields属性说明:
name #字段类型名 class #java类名 indexed #默认true。 是否被索引,说明这个数据应被搜索和排序,一般与stored反之。 stored #默认true。是否被存储,说明这个字段被包含在搜索结果中,一般与indexed反之。 omitNorms #字段的长度不影响得分和在索引时不做boost时,设置它为true。一般文本字段不设置为true。 termVectors #如果字段被用来做more like this 和highlight的特性时应设置为true。 compressed #字段是压缩的。这可能导致索引和搜索变慢,但会减少存储空间,只有StrField和TextField是可以压缩,这通常适合字段的长度超过200个字符。 multiValued #是否有多个值。 positionIncrementGap #和multiValued一起使用,设置多个值之间空白的数量
4, defaultSearchField:默认搜索属性,如q=text就是默认的搜索text字段
<defaultSearchField>text</defaultSearchField>
solrQueryParser:查询转换模式,是并且还是或者(AND/OR必须大写)
<solrQueryParser defaultOperator="OR"/>
Similarity:自定义评分器,class是继承 DefaultSimilarity的子类,或者实现评分器接口的类,
下面的参数str 应该是可配置名称为paramkey,值为param value的参数吧
<similarity class="com.example.solr.CustomSimilarityFactory"> <str name="paramkey">param value</str> </similarity>