Solr学习----FieldType总结
Posted 莫西里
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Solr学习----FieldType总结相关的知识,希望对你有一定的参考价值。
一、介绍
solr在对一个域进行存储和处理的时候,会根据域数据类型去进行相应的处理,例如Text类型的数据会进行分词处理,然后在进行索引的创建,并且,用户可以通过对域的类型进行制定,从而更好的操作查询得出的数据。Solr允许用户自定义FieldType(域类型),同时Solr也提供了大量基本的域类型。
二、详解
1、域类型的属性
域类型作为一种数据类型,在创建或者定义时可以指定一些默认属性,该种域类型中的数据在进行索引过程中的相关操作,并且域类型的属性可以被域继承,我们可以通过对域类型进行属性定义后,当域使用该中域类型会,域中的数据也会具有域类型定义的属性。提示:用户可以通过域定义覆盖域类型定义的一些属性
(1)name
域类型的名称,作为域类型标识符存在,在定义域(Field)时使用的类型(FieldType)属性就是域类型的名称。
(2)class
域类型的数据类型,该属性指向的是solr中的已定义的类型,或者是用户定义的类型,域类型中的数据会被初始化成class执行类类的对象。
(3)positionIncrementGap
当一个域的多值属性指定为true,则该域中的多值中的每两个值之间的距离为该属性指定的值。
(4)autoGeneratePhraseQueries
该属性只用在Text域类型中。如果设置为true,solr自动将text文本中的相邻赐予生成短语,如果设置为false的话,如果想识别与短语则需要用户自己通过双引号去去指定。
(5)docValueFormat
对该种域类型定义一种用户自定的数据格式。需要填入一个模式识别的编码,该便于通过SchemacodecFactory进行识别。
(6)postingsFormat
对该种域类型定义种类自定义的Postiong数据类型,需要填入一个模式识别的编码,该便于通过SchemacodecFactory进行识别。
下面的属性属于域(Field)的属性,在域类型(FieldType)中定以后,域通过继承实现这些属性的默认值:
(7)indexed
是否被索引,true的话进行索引,false则不进行索引
(8)stored
是否进行存储,true进行存储,false则不进行存储
(9)docValues
是否通过使用DocValues结果进行数据存储。true则进行数据存储,false则使用docValues结构进行数据存储
(10)sortMissingFirst/sortMissingLast
控制当排序域的值不存在时该文档(Document)所在队列的位置。true是则在队头/队尾
(11)multiValued
是否为多值,true则为多值,指定一个文档(Document)中该域含有多个值、如果false,则不含有多个值。
(12)omitNorms
忽略标准属性,如果为true时,则忽略该域中的长度正常化标注和索引时评分标注,可以节省内存。默认情况下所有的非分析字段都是true。提示:只有Text域或者那些需要索引时评分的域需要规范,会设置成false。
(13)omitTermFreqAndPositions
忽略短语的频率与位置,如果为true,则忽略文档中的短语的频率、位置。该属性在除了TextField以外的其他域都为true。
(14)omitPositions
是否忽略短语的位置。类似于上一个属性
(15)termVectors/termPositions/termOffsets/termPayload
该属性指定solr去维护每个文档(Document)中短语的位置、偏移量等信息。这些属性也已增加高亮和其他附件条件查询的性能。但是会提高短语的索引大小。
(16)useDocValuesAsStored
如果docValues属性被打开,该属性设置为true时会存储该域的所有数据,这样该数据内容就可以返回,如果false,则无法返回原来的数据。
2、域类型的Similarity
我们在定制一个域类型时,有时会使用定义<similarity/>标签用来进行将来的评分计算。如果没有指定的话则使用默认的BM25Similarity类。该标签这里不进行研究,只是用来提醒初学者solr拥有一个所搜结果评分机制,来对搜索结果进行排名。
3、域类型的定义
这个是域类型定义的一个案例
<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" />
<!-- in this example, we will only use synonyms at query time
<filter class="solr.SynonymFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/>
-->
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
该域类型的定义中,除了上面提到的属性以外,还有一些可能用到的标签(子element)。该定义中,就含有<analyzer/>标签,来指定该域类型所使用的分析器。2中所提到的similarity也通过子标签的方式进行定义。
4、Solr所提供的常用域类型(FieldType)
(1)BinaryField
二进制域类型,该域类型对应二进制数据。
(2)BoolField
布尔类型的域类型,1、t、T,这三个值被认定为true,其他值泉被认定为false。
(3)CollationField
执行Unicode类型的排序和范围长训的排序类型。如果使用ICU4J时,ICUCollationField将是一个不错的选择。
(4)CurrencyField
货币域类型,支持货币与汇率转换。
(5)DateRangeField
日期范围类型,支持索引数据日志,包括时间点实例。
(6)ExtendFileField
从硬盘中拖拽一个文件。
(7)EnumField
允许定义一系列不容易通过字母或数字进行排序的枚举类型的数据。
(8)ICUCollationField
支持用来进行排序和范围查询的Unicode排序域类型。
(9)LatLonType
经纬度域类型,用于存储经纬度数据类型。存储格式为键值对,纬度在第一个。
(10)PointType
点域类型数据,一个N维的点数据类型。例如CAD中点的位置信息
(11)PreAnalyzedField
该域类型的数据,将会被提供其他方式进行analyze,生成序列环单词流、获取存储信息与不通过text域类型处理进行索引。
(12)RandomSortField
该类型不含有值,在该域类型上的排序则将会返回一个随机顺序。
(13)SpatialRecursivePrefixFieldType
该属性主要用于空间查询,接受纬度,精度格式的字符串或者其他wkt格式。
(14)StrField
字符串域类型,该字符串类型的大小最大为32K,为强限制。
(15)TextFiled
文本类型,含有多个单词或者符号
(16)TrieDateField
日趋域类型,具有毫秒级精度的数据掉表示。该类型中的属性precisionStep=0,具有较好的排序性能和最小的索引,precisionStep=8时,具有有效的范围查询。
(17)TrieDoubleField
double域类型,和(16)具有同样的属性且功能相同。
(18)TrieField
如果使用该域类型,则通过type执行该域类型所使用的数据类型,可选项为:integer、龙、float、double、date。相当于其他几种域类型。
(19)TrieFloatField、TrieIntField、TrieLongField
(20)UUIDField
唯一ID域类型。当传入值为NEW时,solr会创建一个新的uuid值并赋值。
以上是关于Solr学习----FieldType总结的主要内容,如果未能解决你的问题,请参考以下文章
Solr 6.7学习笔记(02)-- 配置文件 managed-schema (schema.xml) - filter