Solr学习(2)----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值并赋值。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值