Solr03-schema.xml文件详细说明
目录
1 schema.xml文件详细说明schema.xml文件在SolrCore的conf目录(即collection1/conf)下,主要用于配置Solr的域(Field)以及域的类型(FieldType). 在Solr中,域要先配置再使用. 1.1 fieldType定义域的类型fieldType供Solr内部使用,不支持自定义域的类型. 原始FieldType定义示例: <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>
<!-- 空格分词器,精确匹配: 在向索引库添加text类型的索引时,Solr会首先用空格进行分词,然后把分词结果依次使用指定的过滤器进行过滤,最后剩下的结果才会加入到索引库中以备查询. 注意: Solr的analysis包并没有带支持中文的包,需要自己添加中文分词器. --> <fieldType name="text_ws" class="solr.TextField" positionIncrementGap="100"> <analyzer> <tokenizer class="solr.WhitespaceTokenizerFactory" /> </analyzer> </fieldType> <!-- 分隔符过滤器: 在分词和匹配时,考虑 "-"连字符,字母数字的界限,非字母数字字符,这样"wifi"或"wi fi"都能匹配"Wi-Fi". --> <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1" /> <!-- 同义词过滤器 --> <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true" /> <!-- 停词(禁用词)过滤器: 在禁用字(stopword)删除后,在短语间增加间隔stopword: 即在建立索引过程中(建立索引和搜索)被忽略的词,比如is this等常用词. 在conf/stopwords.txt维护. --> <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" /> 1.2 field定义域<field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false" />
1.3 copyField定义复制域在创建索引的时候,Solr会将源域的内容,复制给目标域. <copyField source="cat" dest="text"/>
1.4 DynamicField定义动态域<dynamicField name="*_i" type="int" indexed="true" stored="true"/>
<dynamicField name="*_i" type="ignored" multiValued="true"/> 如果通过上面的匹配都没找到,可以定义这个,然后定义一个type当String处理. 一般不会发生,但若不定义,找不到匹配会报错. 1.5 uniqueKey指定唯一约束Solr中id域是必须的. <uniqueKey>id</uniqueKey> Solr中某个文档若未被标记为required="false",那么它必须要由
1.6 其他标签? (1) 默认搜索域: <defaultSearchField>text</defaultSearchField> ? 如果搜索参数中没有指定具体的field,那么这是默认的域。 ? (2) Solr查询解析器: <!-- 从Solr 6.6版本开始,不再支持defaultOperator --> <solrQueryParser defaultOperator="OR"/> ? 配置搜索参数短语间的逻辑,可以是"AND|OR". 2 关于schema.xml的优化(1) 将所有只用于搜索、而不需要作为结果的field(特别是数据量比较大的field)的stored设置为false; (2) 将不需要被用于搜索、而只是作为结果返回的Field的indexed设置为false; (3) 删除所有不必要的copyField声明; (4) 为了索引字段的最小化和搜索的效率,将所有的text fields的index都设置为field,然后使用copyField将它们都复制到一个总的text field上,对该text field进行搜索; (5) 为了最大化搜索效率,使用Java编写的客户端与Solr交互(使用流通信); (6) 在服务器端运行JVM(省去网络通信),使用尽可能高的Log输出等级,减少日志量.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |