在 solrhomr 目录下collection/conf/Schema.xml
打开这个配置文件,你会发现有详细的注释。模式组织主要分为三个重要配置
types 部分
是一些常见的可重用定义,定义了 Solr(和 Lucene)如何处理 Field。也就是添加到索引中的xml文件属性中的类型,如int、text、date等. 就像java的8中基本类型一样 ,前面集成的ik分词需要在这定义
<fieldType name="text_ik" class="solr.TextField">
<analyzer type="index" isMaxWordLength="false" class="org.wltea.analyzer.lucene.IKAnalyzer"/>
<analyzer type="query" isMaxWordLength="true" class="org.wltea.analyzer.lucene.IKAnalyzer"/>
</fieldType>
参数说明:
属性 描述
name 标识而已
class 和其他属性决定了这个fieldType的实际行为。
sortMissingLast 设置成true没有该field的数据排在有该field的数据之后,而不管请求时的排序规则, 默认是设置成false。
sortMissingFirst 跟上面倒过来呗。 默认是设置成false
analyzer 字段类型指定的分词器
type 当前分词用用于的操作.index代表生成索引时使用的分词器query代码在查询时使用的分词器
tokenizer 分词器类
filter 分词后应用的过滤器 过滤器调用顺序和配置相同.
fileds
<field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false"/>
<dynamicField name="*_i" type="int" indexed="true" stored="true"/>
<field name ="text" type ="text_ik" indexed ="true" stored ="false" multiValued ="true"/>
<copyField source="content" dest="text"/>
<copyField source="pinyin" dest="text"/>
field: 固定的字段设置 ,
dynamicField: 动态的字段设置,用于后期自定义字段,*号通配符.例如: test_i就是int类型的动态字段.
还有一个特殊的字段copyField,一般用于检索时用的字段这样就只对这一个字段进行索引分词就行了copyField的dest字段如果有多个source一定要设置multiValued=true,否则会报错的
参数说明:
属性 描述
name 字段类型名
class java类名
indexed 缺省true。说明这个数据应被搜索和排序,如果数据没有indexed,就是可以查询 ,需要索引
stored 缺省true。说明这个字段被包含在搜索结果中是合适的。如果数据没有stored,则indexed应是true ,是否存储
omitNorms 字段的长度不影响得分和在索引时不做boost时,设置它为true。 字段的长度不影响得分和在索引时不做boost时,设置它为true。
一般文本字段不设置为true
termVectors 如果字段被用来做more like this 和highlight的特性时应设置为true。
compressed
字段是压缩的。这可能导致索引和搜索变慢,但会减少存储空间,只有StrField和TextField是可以压缩,这通常适合字段的长度超过200个字符multiValued 字段多于一个值的时候,可设置为true
positionIncrementGap 和multiValued一起使用,设置多个值之间的虚拟空白的数量
注意:version 是一个特殊字段,不能删除,是记录当前索引版本号的
设置关键是只设置需要查询的Indexed=true,需要和查询结果一起返回的字段内容设置Stored=true,其他就是false,节约索引大小和资源。
uniqueKey: 唯一键,这里配置的是上面出现的fileds,一般是id、url等不重复的。在更新、删除的时候可以用到。
defaultSearchField:默认搜索属性,如q=solr就是默认的搜索那个字段
solrQueryParser:查询转换模式,是并且还是或者(AND/OR必须大写)