什么是域?
域相当于数据库的表字段,用户存放数据。用户根据业务需要去定义相关的Field(域)。
域的分类
注:配置域,在/usr/local/solr/solrhome/collection1/conf/schema.xml中配置(根据自己的安装位置)。
①field普通域
大多数情况都可以用这个域来完成,主要定义了域名和域的类型。
②copyField复制域
复制域中有source叫做源域,dest代表目标域,在维护数据的时候,源域中的内容会复制到目标域中一份,从目标域中搜索,就相当于从多个源域中搜索一样。
③dynamicField动态域
solr中域名要先定义后使用,没有定义就使用会报错,如果没有定义的域名想使用可以模糊匹配动态域, 让没有定义的域名可以使用。
④uniqueKey主键域
在添加数据的时候必须有主键域, 没有会报错, 这个不用添加也不用修改, 就使用这个默认的域名id就可以。
域的常用属性
name:指定域(字段)的名称。
type:指定域(字段)的类型。定义了域(字段)的存储和处理方式,如String类型标示字段值将会被原样存储,不分词,不改变。
indexed:是否索引,索引的字段是在搜索的时候可以用它来查询或排序,在lucene中,被索引的字段将会建立倒排表.
stored:是否存储,一个字段是否被存储,取决于你是否想在Solr的查询结果中得到它,也就是说你是否想在查询结果中看到它,它将会消耗cpu、io和磁盘空间等资源。
required:是否必须,简单的说,如果这个字段是必须的,类似数据库的非空,如果添加的文档字段为空,则添加不到索引上去。默认这个值设置为假。
default:字段的默认值,经常用在字段是必须的,有时候却又无法提供的时候,solr就会用默认值替代。
multiValued:是否多值,表示这个字段在一个文档中是否可以存储多个值的内容。
Solr停止和启动
配置文件修改之后,必须重启Solr。
停止命令:./shutdown.sh
启动命令:./startup.sh
普通域示例
<!-- 普通域:商品id、标题、价格、图片、分类、卖家、品牌、修改时间 -->
<field name="item_goodsid" type="long" indexed="true" stored="true"/>
<field name="item_title" type="text_ik" indexed="true" stored="true"/>
<field name="item_price" type="double" indexed="true" stored="true"/>
<field name="item_image" type="string" indexed="false" stored="true" />
<field name="item_category" type="string" indexed="true" stored="true" />
<field name="item_seller" type="text_ik" indexed="true" stored="true" />
<field name="item_brand" type="string" indexed="true" stored="true" />
<field name="item_updatetime" type="date" indexed="true" stored="true" />
复制域示例
可以根据哪些关键字(keywords)来搜索,暴露在外面的keywords无需存储。
<!-- 可以根据哪些关键字来搜索 -->
<!-- 暴露在外面的keywords无需存储 -->
<field name="item_keywords" type="text_ik" indexed="true" stored="false" multiValued="true"/>
<!-- keywrods来源 -->
<copyField source="item_title" dest="item_keywords"/>
<copyField source="item_category" dest="item_keywords"/>
<copyField source="item_seller" dest="item_keywords"/>
<copyField source="item_brand" dest="item_keywords"/>
动态域示例
<!-- 商品规格是什么:选择版本、颜色等 不确定,实际运行才确定 -->
<dynamicField name="item_spec_*" type="string" indexed="true" stored="true" />