一、介绍
在用户进行索引或者搜索的过程中,各种各样的Field提供给用户数据存储的借口,Solr通过读取Field的属性来对Field中的数据进行相关的处理。这里介绍Solr常用的Field(域)、CopyField(复制域)、DynamicField(动态域)域其他常用域。
二、详解
1 Field
Field相当于Java中的类属性,用户存放数据,因此用户根据业务需要去定义相关的Field(域),一般来说,每一种对应着一种数据,用户对同一种数据进行相同的操作。Field的定义主要是对属性进行赋值。
(1)name
域名城,域的标示名称,在进行索引、查询所使用名称。
(2)type
该属性指定域类型,指定该种类所对应的域类型,对应着相应的数据处理方式。
(3)default
给该域设置一个默认值,如果用户没有对该属性进行赋值时,该域将填充一个默认值。
(4)docValues
是否使用docValues格式进行存储数据,如果true时,则使用docValues格式。
(5)indexed
该域的数据是否进行索引。填充值为true后者false
(6)multiValued
是否使用多值,如果使用true,表明单个文档的该属性可能含有多个值
(7)omitNorms
如果选择true,则将忽略长度规则和索引时评分,会节省内存。默认情况下对于分分析域(int,float,bool,string)是开启的。
(8)omitPositions/omitTermFreqAndPositions
忽略术语的矢量位置和频率
(9)required
是否必须填充,如果为true,要求用户必须对该域输入数据。默认为false
(10)sortMissingFirst/sortMissingLast
该以该域为基础进行排序时,如果没有数据,则排序到最前或者最后
(11)stored
是否进行存储,因为在搜索是否可以返回所有的数据。填充值为true或者false
(12)termVectors/termPositions/termOffsets/termPayloads
该属性指定solr是否存储术语矢量的位置、偏移量等矢量信息。
(13)useDocValuesAsStored
如果该域打开docValues,如果该值为true,则可以该域所有的数据。
2 CopyField(复制域)
复制域的作用在于将某一个Field中的数据复制到另一个域中,其定义的格式为:
<copyField source="cat" dest="text" maxChars="30000" />
maxChars:复制域的最大长度。
复制域用处:当一篇标题如果在标题与正文中都有相关的关键词,当用户并不知道关键词在哪一个域中时,可以将标题域与正文域复制到复制域中,这样可以通过对一个复制域建立索引可以做到对标题域索引的搜索能力。
3 DynamicField(动态域)
当用户插入数据发现某一个域没有定义时,这时可以使用动态域进行数据存储。起定义为:
<dynamicField name="*_i" type="int" indexed="true" stored="true"/>
该动态域存储int类型的数据,即用户在忘记定义某一个int类型的域时,可以将该数据存放到动态域中。
4 其他元素
在定义一个模式(Schema)时,除了上述几种重要的元素外,还有其他一些重要的元素:
(1)Unique Key(唯一键)
在一个模式(Schema)定义中,需要指定一个唯一键,虽然该键在索引与搜索中并没有太大的作用。需要注意的是:uniqueKey标签中的域,起multiValued属性必须为false。
(2)Default Search Field
默认搜索域,虽然并不建议在schema.xml文件定义该域,但是solr依旧支持该中模式。在配置中:<defaultSearchField>(已经被df参数取代)指定默认的搜索属性,<solrQueryParse defaultOperator="OR">(已经被q.op参数取代)。
(3)Similarity
similarity是lucence中的一个在搜索中进行结果评分的类,所有的core/collection如果没有指定的话,都具有相同的similarity配置,solr会使用默认的SchemaSimilarityFactory对象,使用的是BM25Similarity对象。用户可以通过定义similarity标签进行重新定义similarity。
|
|