索引的對象遵循以下原則:
實現(xiàn)默認的無參數(shù)構(gòu)造器,不要是public的。便于compass采用Constants.newInstance()
提供identifier,
提供訪問和設(shè)置方法
建議重載equals和hashcode方法。建議以業(yè)務(wù)主鍵為參考。
alias:每一個影射定義都注冊了一個別名。這個別名用來聯(lián)系類的osem定義和類本身。
Root:在compass中有兩類可搜索的類:root searchable和non-root searchable 類。root searchable類最好定義作為hits結(jié)果返回的類。non-root searchable類不要求定義id影射。
子索引:默認情況下,每一個root searchable類都有自己的子索引,名稱缺省為alias。子索引的名稱也可以自由控制。允許幾個root searchable類索引到相同的子索引中。或者用子索引hash功能。
searchable id不要求定義搜索的元數(shù)據(jù),如果沒有定義,compass自動創(chuàng)建內(nèi)部的元數(shù)據(jù)id。如果searchable id不需要被搜索,那么需要為它定義一個可搜索元數(shù)據(jù)。注意下面的元數(shù)據(jù)定義方式:
@Searchable
public class Author {
@SearchableId(name = "id")
private Long id;
// ...
}
@Searchable
public class Author {
@SearchableId
@SearchableMetaData(name = "id")
private Long id;
//
Searchable Constant:允許對一個類定義一系列的的常量數(shù)據(jù)。對于添加靜態(tài)元數(shù)據(jù)是非常有用的。
<constant>
<meta-data>type</meta-data>
<meta-data-value>person</meta-data-value>
<meta-data-value>author</meta-data-value>
</constant>
Searchable Dynamic Meta Data:允許將表達式的結(jié)果保存到搜索引擎中。該影射不能影射任何類屬性。動態(tài)元數(shù)據(jù)的值是根據(jù)動態(tài)轉(zhuǎn)換器計算表達式得到的。compass內(nèi)建了比如el,jexl,velocity,ognl,groovy等轉(zhuǎn)換器。當定義表達式后。root 類被注冊為data key下的值。
<dynamic-meta-data name="test" converter="jexl">
data.value + data.value2
</dynamic-meta-data>
Searchable Reference:映射root類和其它類之間的關(guān)系。在marshals的過程中,只marshal參考對象的id。但是在unmarshal過程中根據(jù)id裝載參考的對象。
compass在參考對象上不執(zhí)行任何級聯(lián)操作,也不提供延遲加載。
<class name="A" alias="a">
<id name="id" />
OSEM - Object/Search Engine Mapping
Compass - Java Search Engine 40
<reference name="b" />
<!-- ... -->
</class>
<class name="B" alias="b">
<id name="id" />
<!-- ... -->
</class>
Searchable Component:嵌入一個可搜索類到本身的搜索類中。組件參考搜索類能夠設(shè)置為?Root。為Root的組件一般都是具有id屬性。比如人員和姓名組件(non-root),人員和帳戶(root)。
<class name="A" alias="a">
<id name="id" />
<component name="b" />
<!-- ... -->
</class>
<class name="B" alias="b" root="false">
<!-- ... -->
</class>
繼承處理:
<class name="A" alias="a">
<id name="id" />
<property name="aValue">
<meta-data>aValue</meta-data>
</property>
</class>
<class name="B" alias="b" extends="a">
<property name="bValue">
<meta-data>aValue</meta-data>
</property>
</class>
Root 類有自己的索引,而依賴Root類的非Root類不需要索引。
Class mapping能夠繼承其它class mapping(可以超過一個)。也能夠繼承contract mapping。
contract:相當于java語言中的接口。如果有幾個相同的類具有相似的屬性。就可以定義一個contract。然后在子類中extend該contract。
posted on 2006-12-02 01:15
不做浮躁的人 閱讀(1940)
評論(0) 編輯 收藏