schema

1
<schema name="core1" version="1.5">
参数 描述
name schema 的名称,仅用于展示
version solr 的 schema 语法的版本号

fieldType

1
<fieldType name="string" class="solr.StrField" sortMissingLast="true" />
参数 描述
name 字段类型的名称
class 以“solr.”开始,后面为对应的 java 类的短类名构成
其中,solr.TextField 类型的 fieldType 还有 analyzer 属性
具体可参见 solr-core-5.jar / org.apache.solr.schema 包
sortMissingLast 若为 true,检索结果中,没有该字段类型的数据排在有该字段类型的数据之后,而不管排序请求时设定的排序规则
sortMissingFirst 若为 true,检索结果中,没有该字段类型的数据排在有该字段类型的数据之前,而不管排序请求时设定的排序规则
positionIncrementGap     用于多值字段(multiValued = true)的短语查询
如一个文档有两个 tag(标签):
tag1  :   AB   CD
tag2  :   XY   ZW
若 positionIncrementGap = 0,那么这 4 个词的位置分别为 0, 1, 2, 3
如果搜索 CD   XY,那么这个文档将会被匹配
如果认为该文档不应该被匹配,可将 positionIncrementGap 调大一些,如 positionIncrementGap = 100,那么现在这 4 个词的位置分别为 0, 1 , 100, 101。这样短语查询就不会匹配到该文档

field

1
<field name="id" type="int" indexed="true" stored="true" required="true" />
参数 描述
name 具体字段的名称
type 字段类型的名称,参考 <fieldType> 节点
indexed 是否被索引,不需要被检索的字段应该设为 false,以提升性能
stored 是否被存储,需要返回内容值的字段应该设为 true,否则在检索结果中取不到值
docValues 是否有文档值,仅支持 StrField,UUIDField,Trie*Field
multiValued     是否有多个值,默认 false
omitNorms 是否省略规范,规范是用来提升字段长度标准化和索引时间。只有全文本和需要提升索引时间的字段需要规范。
若为 true,solr 不会存储规范,因此索引大小会变小,节省内存,默认为 true
required 字段是否是必须的。若为 true,建立索引的时候该字段必须有值,否则抛出异常
default 字段没有值时,默认使用的值

dynamicField

动态字段 name = “*_i” 将匹配所有以 “_i” 结束的字段名,如 id_i,age_i

参数属性参考 <field>

1
<dynamicField name="*_i" type="int" indexed="true" stored="true"/>

uniqueKey

设置文档的唯一键,不同的键值表示不同的文档对象

1
<uniqueKey>id</uniqueKey>

copyField

将 source 指定的字段名称拷贝到 dest 指定的字段名中,以便进行统一的检索

1
2
3
4
5
<copyField source="name" dest="text"/>
<copyField source="sortName" dest="text"/>
<copyField source="subSortName" dest="text"/>

附完整配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
<?xml version="1.0" encoding="UTF-8" ?>
<schema name="core1" version="1.5">
<field name="_version_" type="long" indexed="true" stored="true"/>
<!-- 商品 ID -->
<field name="id" type="int" indexed="true" stored="true" required="true"/>
<!-- 商品名称 -->
<field name="name" type="text_ik" indexed="true" stored="true" required="true"/>
<!-- 商品一级分类 -->
<field name="sortName" type="string" indexed="true" stored="true" required="true"/>
<!-- 商品二级分类 -->
<field name="subSortName" type="string" indexed="true" stored="true" required="true"/>
<!-- 商品价格 -->
<field name="price" type="double" indexed="true" stored="true" required="true"/>
<!-- 商品销量 -->
<field name="sales" type="int" indexed="true" stored="true" required="true"/>
<!-- 发货地 -->
<field name="area" type="string" indexed="true" stored="true" required="true"/>
<!-- 检索域 -->
<field name="text" type="text_ik" indexed="true" stored="false" multiValued="true" required="false"/>
<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"/>
<dynamicField name="*_l" type="long" indexed="true" stored="true"/>
<dynamicField name="*_ls" type="long" indexed="true" stored="true" multiValued="true"/>
<dynamicField name="*_t" type="text_ik" indexed="true" stored="true"/>
<dynamicField name="*_txt" type="text_ik" indexed="true" stored="true" multiValued="true"/>
<dynamicField name="*_b" type="boolean" indexed="true" stored="true"/>
<dynamicField name="*_bs" type="boolean" indexed="true" stored="true" multiValued="true"/>
<dynamicField name="*_f" type="float" indexed="true" stored="true"/>
<dynamicField name="*_fs" type="float" indexed="true" stored="true" multiValued="true"/>
<dynamicField name="*_d" type="double" indexed="true" stored="true"/>
<dynamicField name="*_ds" type="double" indexed="true" stored="true" multiValued="true"/>
<dynamicField name="*_dt" type="date" indexed="true" stored="true"/>
<dynamicField name="*_dts" type="date" indexed="true" stored="true" multiValued="true"/>
<dynamicField name="*_ti" type="tint" indexed="true" stored="true"/>
<dynamicField name="*_tl" type="tlong" indexed="true" stored="true"/>
<dynamicField name="*_tf" type="tfloat" indexed="true" stored="true"/>
<dynamicField name="*_td" type="tdouble" indexed="true" stored="true"/>
<dynamicField name="*_tdt" type="tdate" indexed="true" stored="true"/>
<dynamicField name="*_c" type="currency" indexed="true" stored="true"/>
<dynamicField name="ignored_*" type="ignored" multiValued="true"/>
<dynamicField name="attr_*" type="text_ik" indexed="true" stored="true" multiValued="true"/>
<dynamicField name="random_*" type="random" />
<uniqueKey>id</uniqueKey>
<copyField source="name" dest="text"/>
<copyField source="sortName" dest="text"/>
<copyField source="subSortName" dest="text"/>
<fieldType name="string" class="solr.StrField" sortMissingLast="true" />
<fieldType name="boolean" class="solr.BoolField" sortMissingLast="true"/>
<fieldType name="int" class="solr.TrieIntField" precisionStep="0" positionIncrementGap="0"/>
<fieldType name="float" class="solr.TrieFloatField" precisionStep="0" positionIncrementGap="0"/>
<fieldType name="long" class="solr.TrieLongField" precisionStep="0" positionIncrementGap="0"/>
<fieldType name="double" class="solr.TrieDoubleField" precisionStep="0" positionIncrementGap="0"/>
<fieldType name="tint" class="solr.TrieIntField" precisionStep="8" positionIncrementGap="0"/>
<fieldType name="tfloat" class="solr.TrieFloatField" precisionStep="8" positionIncrementGap="0"/>
<fieldType name="tlong" class="solr.TrieLongField" precisionStep="8" positionIncrementGap="0"/>
<fieldType name="tdouble" class="solr.TrieDoubleField" precisionStep="8" positionIncrementGap="0"/>
<fieldType name="date" class="solr.TrieDateField" precisionStep="0" positionIncrementGap="0"/>
<fieldType name="tdate" class="solr.TrieDateField" precisionStep="6" positionIncrementGap="0"/>
<fieldType name="binary" class="solr.BinaryField"/>
<fieldType name="random" class="solr.RandomSortField" indexed="true" />
<fieldType name="text_ik" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="false" />
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="true" />
<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>
<fieldType name="text_ws" class="solr.TextField" positionIncrementGap="100">
<analyzer>
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
</analyzer>
</fieldType>
<fieldType name="ignored" stored="false" indexed="false" multiValued="true" class="solr.StrField" />
<fieldType name="currency" class="solr.CurrencyField" precisionStep="8" defaultCurrency="USD" currencyConfig="currency.xml" />
</schema>