managed-schema中主要有以下几种元素:
1. <field>
定义Solr索引的document里的字段,这个一般是根据具体的搜索应用来定义需要有什么字段。只有在managed-schema文件的field属性中有定义的字段才能被保存至solr。如果保存solr索引数据时存在未定义的字段,则会报field找不到的异常;filed有三个特殊一点的字段,分别是:"_version_", "_root_" 和 "id"。
属性 | 默认值 | 说明 |
name | 字段名称,必须,不能取名score、前后辍为下划线的名字(如:_VERSION_等保留字) | |
type | 字段类型,必须。取值范围为managed-schema文件中定义的<fieldType>中的类型 | |
indexed | true | 是否进行索引。 true:需要索引。 |
stored | true | 是否存储。如果此字段的值需要显示在搜索结果中,则需要进行存储。 |
docValues | false | 是否需要存储docValues。docValues用于提升sorting, faceting, grouping, function queries 等性能,现在仅支持StrField, UUIDFiel和所有的Trie*Fields和 *PointFields、日期字段和枚举字段, 此值为true的字段要求此字段 multiValued=false, 并且 (required=true或设置了default的值). |
multiValued | false | 是否有多个值。 |
omitNorms | 见下文 | |
termVectors | false | 设置为true,使More Like This特性生效,会极大的增加索引文件的大小。 |
termPositions | false | 通常用于提高高亮搜索结果这一功能的性能。设置为true,会增加索引文件的大小。 |
termOffsets | false | 通常用于提高高亮搜索结果这一功能的性能。设置为true,会增加索引文件的大小。 |
termPayloads | false | 通常用于提高高亮搜索结果这一功能的性能。设置为true,会增加索引文件的大小。 |
required | false | 字段是否允许为空,true:不允许 |
default | 此字段的默认值。通常用于记录索引生成的当前时间 | |
sortMissingFirst sortMissingLast |
false | 需要对搜索结果根据某个字段排序时,如果某条记录的此字段值为空,则该记录是排在搜索结果的最前/最后 |
omitTermFreqAndPositions |
对所有不是文本类型的字段,默认为TRUE | |
omitPositions |
与omitTermFreqAndPositions相似,只是仅忽略位置信息 | |
useDocValuesAsStored |
当docValues=true时,设置此值为TRUE,则如果返回的字段列表使用了通配符,即使此字段设置了stored=false, 此字段还是会出现在返回的结果里, |
|
large |
false | 设置为TRUE时,需要设置stored=true和multiValued=false, 表示此字段是大字段,会被懒加载。 通常用于此字段的内容可能比较大,不需要载入内存 |
omitNorms:
norm是基于document length norm,document boost和field boost计算出的浮点(float)值。这里的boost可以理解为权重。document length norm用于为较小的document增加权重(权重较大的话,计算搜索结果的score值会更高一点)。也就是说如果有一个比较小的document和一个比较长的document都符合搜索条件,Lucene会认为那个较小的document相对于较长的document更新符合搜索条件。omitNorms是指忽略norm,所以设为false时,较小的document和较长的document有相同的权重。因此如果我们需要为某个字段在索引时进行加权(boost),则应该设置为false。当字段类型为基本类型(比如:int, float,date,bool. string)时此默认值是true。
termVectors, termPositions, termOffsets 和 termPayloads :
此四个属性通常用于 hl.useFastVectorHighlighter为true时的情况,会较大地增加索引大小
omitTermFreqAndPositions:
如果为TRUE,索引时将忽略频率、位置、负载等信息,这有助于提升不需要这些信息的字段的性能,也会减少索引大小。但是查询如果依赖于字段的位置信息,则会导致查询不到相关document。