《compass-reference》翻譯計劃之6.3 檢索類對映(一)
6.3 檢索類對映
6.3.1 檢索ID和檢索元資料
每個root級的檢索類至少定義1個檢索ID。檢索ID用於唯一識別該物件。使用者能定義多個檢索ID,也能把類當作一個檢索ID(必須註冊自己的轉換器或者使用檢索ID元件對映)。
一般來說,檢索ID是不需要作為一個檢索元資料來定義。如果使用者沒有定義檢索ID,Compass將建立一個內部的元資料id(解析之後)——通常,基於代理id的文字搜尋是不需要明確定義的。如果檢索ID不必被搜尋,那麼必須為它定義一個檢索元資料。當採用XML對映方式時,可以為檢索ID
這裡有一個使用annotations定義檢索ID的例子。這個例子沒有建立任何顯式的元資料。
@Searchable
public class Author {
@SearchableId
private Long id;
// ...
}
對於同一個對映,我們來看一下使用XML方式的定義:
<class name="Author" alias="author"> <id name="id" /> <!-- ... --> </class>
接下來我們來看另一個例子——效果同前2個例子,此時顯示定義了一個元資料:id:
@Searchable
public class Author {
@SearchableId(name = "id")
private Long id;
// ...
}
下面是採用SearchableMetaData達到同樣效果的定義:
@Searchable
public class Author {
@SearchableId
@SearchableMetaData(name = "id")
private Long id;
// ...
}
同樣效果的XML定義版本:
<class name="Author" alias="author"> <id name="id"> <meta-data>id</meta-data> </id> <!-- ... --> </class>
6.3.2 檢索ID元件
一個檢索ID元件表示一個合成物件,即一個id物件。除了它是作為該類的id外,它的使用方式與其它檢索元件是相似的。接下來我們看一個使用annotations定義檢索ID元件的例子(注意:在這個例子中,B不是一個root級的檢索類,這裡需要定義ids)。
@Searchable
public class A {
@SearchableIdComponent
private B b;
// ...
}
@Searchable(root = false)
public class B {
@SearchableId
private long id1;
@SearchableId
private long id2;
}
同樣效果的XML展現方式:
<class name="A" alias="a"> <id-component name="b" /> <!-- ... --> </class> <class name="B" alias="b" root="false"> <id name="id1" /> <id name="id2" /> </class>
6.3.3 檢索Parent
檢索Parent對映對元件提供了迴圈對映的支援(儘管方向元件對映也被支援)。如果元件類想對映成包裝類,那麼父對映就能被用於對映它。父對映將不雜湊(資料持久化到搜尋引擎中)父物件,當從搜尋引擎中載入父物件時,只是初始化它。
下面是一個例子:使用annotations定義了一個檢索元件和檢索Parent(注意:在這個例子中,B不是一個root級的檢索類,這裡不需要定義ids)。
@Searchable
public class A {
@SearchableId
private Long id;
@SearchableComponent
private B b;
// ...
}
@Searchable(root = false)
public class B {
@SearchableParent
private A a;
// ...
}
同樣效果的XML對映定義:
<class name="A" alias="a"> <id name="id" /> <component name="b" /> <!-- ... --> </class> <class name="B" alias="b" root="false"> <parent name="a" /> <!-- ... --> </class>
6.3.4 檢索Property和檢索元資料
從簡單關聯上看,一個檢索Property可當作一個類的attribute或者property。檢索property對映一個物件的attribute,最終會轉成String存放在搜尋引擎中。檢索的型別包括原型別和包裝型別,java.util.Date,java.util.Calendar和Compass中的多種型別都被自動支援(請看型別轉換章節相關的內容)。而且,也能使用自定義轉換器來支援使用者定義的型別。一個檢索元資料使用檢索Property值(使用它註冊的轉換器,把它轉換成String型別),通過一個名稱,把它儲存在索引中。
當使用XML對映時,對應一個property對映,可能會定義一個或多個元資料項。當使用annotation時,對應對映類的attribute,必須定義一個SearchableProperty。可以顯示地定義一個SearchableMetaData或者SearchableMetaDatas(針對多個元資料)。如果沒有定義SearchableMetaData(s),那麼一個SearchableProperty將自動建立一個SearchableMetaData。
下面是使用annotations定義一個檢索Property的例子。這個例子將根據類的域名自動建立一個同名的檢索元資料。
@Searchable
public class Author {
// ...
@SearchableProperty
private String value;
// ...
}
同樣效果的另一種表示方式(使用了顯示的SearchableMetaData):
@Searchable
public class Author {
// ...
@SearchableProperty
@SearchableMetaData(name = "value")
private String value;
// ...
}
同樣效果的XML對映定義:
<class name="Author" alias="author"> <! ... --> <property name="value"> <meta-data>value</meta-data> </property> <!-- ... --> </class>