solr的域

solrhom相当于存放数据的地方,里面一个个文件相当于数据库,每个数据库里面有两个文件夹,一个data,一个conf,conf下有一个schema.xml文件,配置域,相当于表的字段。

solr中内置了许多的字段类型

参照Solr中的字段类型field type

配置域

域相当于数据库的表字段,用户存放数据,因此用户根据业务需要去定义相关的Field(域),一般来说,每一种对应着一种数据,用户对同一种数据进行相同的操作。

域的常用属性:

  • name:指定域的名称
  • type:指定域的类型
  • indexed:是否索引
  • stored:是否存储
  • required:是否必须
  • multiValued:是否多值
一般域的配置:
<field name="item_goodsid" type="long" indexed="true" stored="true" />
 

域为item_goodsid我们在使用spring data solr 的时候会用到这个域

type就是指定这个域存放的数据类型

indexed=true就是需要索引

复制域

复制域的作用在于将某一个Field中的数据复制到另一个域中

一般 不需要存储,需要索引,type为ik分词

<!-- 复制域 -->
  <field name="item_keywords" type="text_ik" indexed="true" stored="false" multivalued="true"/>
    <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="attr_*" type="string" indexed="true" stored="true" multiValued="true"/>
参数:   source:原来域
          dest:指定域(即:将原来域复制到该指定域)
复制域常用于多域搜索,如:电商项目中搜索商品,既要在名字域中搜索也要在描述域中搜索,传统的做法需要手工写两次,而solr想发送一次请求,可到两个域中搜索,为此,引入了复制域的概念,将两个域的域名复制到一个text文本域中。

主键

<uniqueKey>id</uniqueKey>

文档的唯一标识,对应field里name="id"的那个字段, 必须填写这个field(除非该field被标记required="false"),否则solr建立索引报错。

常用的类型

String--->solr.StrField
boolean--->solr.BoolField
int--->solr.TrieIntField
float--->solr.TrieFloatField
long--->solr.TrieLongField
double--->solr.TrieDoubleField
text_general--->solr.TextField

自定义的域(参考)

<schema>

  。。。。。。


<!-- 基本字段 -->
    <!-- 商品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_keywords" type="text_ik" indexed="true" stored="false" multiValued="true"/>
    <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" />
</schema>
{
    "id": "1",
    "item_goodsid": 1111,
    "item_title": "128G的华为p30",
    "item_price": 3888.8,
    "item_image": "http://1.jpg",
    "item_category": "手机",
    "item_seller": "张三店铺",
    "item_brand": "华为",
    "item_spec_size": "3.5mm"
}
原文地址:https://www.cnblogs.com/coder-lzh/p/10722264.html