solr学习之路2---Field和FieldType的介绍

来源:互联网 发布:python 写入环境变量 编辑:程序博客网 时间:2024/06/05 16:17

上一篇已经介绍了solr怎么去搭建,今天说下solr中的Field和FieldType

1.什么是Field

在我认为,Field就相当于数据库中的字段,而FieldType就是数据库中列的类型了,我不喜欢把他叫我索引,我感觉索引总是不怎么好去理解。

2.Field的配置

2.1 普通的Field

Field是在我们所配置的solrhome的collection1\conf\schema.xml中,
   <field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false" />    <field name="sku" type="text_en_splitting_tight" indexed="true" stored="true" omitNorms="true"/>
这就是系统自带的Field
其中name就是Field的名字
type则是我们所配置的FieldType
index有两个值,true或者false,代表的是是否作为索引进行查询,在实际开发中,当你需要这一Field需要被查询这设置为true,这样可以加快运行效率
stored也一样有两个值,代表的是是否将field域中的内容存储到文档域,简单通俗的来说,就是你这一个Field需不需要被当作查询结果返回。
multiValued指的是是否允许有多个值,一般是被用来copyFiled。
omitNorms指的是是否使用Norms,norms是否启用,代表着solr中的排序 打分规则中的 length normalization 和 boosting

2.2 copyField

<field name="remark1" type="text_general" indexed="true" stored="true"/><field name="remark2" type="text_general" indexed="true" stored="true"/><field name="search" type="text_general" indexed="true" stored="false" multiValued="true"/><!-- copyfield字段,把上面的字段放入一个字段中--><copyField source="remark1" dest="search"/>
<copyField source="remark2" dest="search"/>
这是我写的CopyField,如果配了CopyField就是代表把上面的remark1和remark2字段作为一个字段进行查询,当你查询search字段时,就同时查询了remark1和remark2字段。而search字段也不需要我们自己去写,当你配置了remark1和remark2字段时,search同时就被配置了,但是search里面存的就remark1和remark2中字段的值,不包括他们的FieldName。
source中写的是需要被同时查询的字段名
dest中写的是需要被配置到那个字段。
还可以配置search为默认字段,当不写查询的FieldName时,默认使用search,但是我觉得这个没有什么用,因为我们使用的默认的查询拦截器是/select,而/select中可以配置自己的默认查询字段,系统的默认字段是text。

2.3 dynamicField

dynamicField看字面意思就是动态属性,在应用中的使用就是配置了动态字段,只需要按照相应的格式去书写字段名,系统就会把它认为是你配置好的字段类型,以下是例子:
 <dynamicField name="*_i"  type="int"    indexed="true"  stored="true"/> <dynamicField name="*_is" type="int"    indexed="true"  stored="true"  multiValued="true"/> <dynamicField name="*_s"  type="string"  indexed="true"  stored="true" /> <dynamicField name="*_ss" type="string"  indexed="true"  stored="true" multiValued="true"/>
例如你在使用时只需要写xxxx_i,系统就会把这个字段认为是int类型的,然后index为true,stored为ture,而这个xxxx_i字段也就不需要去在Field中配置了,也是很简单。
3.FieldType
其实就是配置Field的类型,因为一个类型对应了一个具体的类。