solrhom相當於存放數據的地方,里面一個個文件相當於數據庫,每個數據庫里面有兩個文件夾,一個data,一個conf,conf下有一個schema.xml文件,配置域,相當於表的字段。
solr中內置了許多的字段類型
配置域
域相當於數據庫的表字段,用戶存放數據,因此用戶根據業務需要去定義相關的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" }