一、field节点
filed节点用于定义数据源字段所使用的搜索类型与相关设置
- name:数据源字段名,搜索使用到。
- type:搜索类型名例如中文ika搜索名text_ika,对应于fieldType中的name。不需要分词的字符串类型,string即可,如果需要分词,用上面配置好的分词type。
- indexed:是否被索引,只有设置为true的字段才能进行搜索排序分片(earchable、 sortable、 facetable)。
- stored:是否存储内容,如果不需要存储字段值,尽量设置为false以提高效率。
- multiValued:是否为多值类型,SOLR允许配置多个数据源字段存储到一个搜索字段中。多个值必须为true,否则有可能抛出异常。
- omitNorms:是否忽略掉Norm,可以节省内存空间,只有全文本field和need an index-time boost的field需要norm。(具体没看懂,注释里有矛盾)
- termVectors:当设置true,会存储 term vector。当使用MoreLikeThis,用来作为相似词的field应该存储起来。
- termPositions:存储 term vector中的地址信息,会消耗存储开销。
- termOffsets:存储 term vector 的偏移量,会消耗存储开销。
- default:如果没有属性需要修改,就可以用这个标识下。
- docValues:Solr 4.2中加入了该属性
- docValuesFormat:可选的值为Disk或者Memory
示例:
<field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false" />
二、dynamicField节点
动态字段就是不用指定具体的名称,只要定义字段名称的规则,例如定义一个 dynamicField,name 为*_i,定义它的type为text,那么在使用这个字段的时候,任何以_i结尾的字段都被认为是符合这个定义的,例如:name_i,gender_i,school_i等。
- name:使用通配符,比如“*_i”,来处理类似“name_i”之类的field
示例:
<dynamicField name="*_i" type="int" indexed="true" stored="true"/>
三、uniqueKey节点
Solr中默认定义唯一主键key为id域,如下:
<uniqueKey>id</uniqueKey>
Solr在删除、更新索引时使用id域进行判断,也可以自定义唯一主键。
注意在创建索引时必须指定唯一约束。
四、copyField节点
copyField复制域,可以将多个Field复制到一个Field中,以便进行统一的检索
- source:被拷贝的field,支持用通配符指定多个field,比如:*_name
- dest:拷贝到的目的field
- maxChars:最大字符数
示例:
<copyField source="cat" dest="text"/>
<copyField source="name" dest="text"/>
<copyField source="manu" dest="text"/>
<copyField source="features" dest="text"/>
<copyField source="includes" dest="text"/>
五、fieldType节点
定义field的类型
- name:就是这个FieldType的名称。
- class:指向org.apache.solr.analysis包里面对应的class名称,用来定义这个类型的行为
- sortMissingLast,sortMissingFirst两个属性是用在可以内在使用String排序的类型上,默认false,适用于字段类型:string、boolean、sint、slong、sfloat、sdouble、pdate。
- sortMissingLast=”true”,没有该field的数据排在有该field的数据之后,而不管请求时的排序规则,在Java中对应的意思就是,该字段为NULL,排在后面。
- sortMissingFirst=”true”,排序规则与sortMissingLast相反。
- positionIncrementGap:可选属性,定义在同一个文档中此类型数据的空白间隔,避免短语匹配错误。
- ananlyzer:如果class是solr.TextField,这个配置是必填的。告诉solr如何处理某些单词、如何分词,比如要不要去掉“a”,要不要全部变成小写
- type:index或query
- tokenizer:分词器,比如:StandardTokenizerFactory
- filter:过滤器,比如:LowerCaseFilterFactory
示例:
<fieldType name="managed_en" class="solr.TextField" positionIncrementGap="100">
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.ManagedStopFilterFactory" managed="english" />
<filter class="solr.ManagedSynonymFilterFactory" managed="english" />
</analyzer>
</fieldType>