2015-11-05 75 views
0

我試圖將Hibernate Search集成到應用程序中。應用程序實體可以具有多種語言存儲的屬性。這是通過將非多語言和多語言屬性拆分爲獨立實體來實現的。這種分裂的一個例子片段看起來是這樣的(ommitted冬眠註釋作爲數據庫的部分工作正常):Hibernate-Search @Indexed嵌入HashMap,如何在索引中包含鍵集

@Indexed 
public class Assignment { 

    @DocumentId 
    private UUID id; 

    @IndexedEmbedded 
    private Map<String, AssignmentI18n> i18n; 

    // Other properties 
} 

public class AssignmentI18n { 

    @DocumentId 
    @FieldBridge(impl = AssignmentI18nBridge.class) 
    private AssignmentI18nId id; 

    @Field 
    private String title; 

    @Field 
    private String description; 

    @Field 
    private String requirements; 

    public static class AssignmentI18nId { 

     private UUID assignmentId; 

     private String iso; 
    } 
} 

現在我想通過將其作爲單一實體進行使用Hibernate Search的這個數據檢索指數。註釋設置的方式會發生,但多語言字段的所有條目都存儲在索引中的相同字段中。 Basicly我的索引結構是這樣的:

id 
i18n.title 
i18n.description 
i18n.requirements 

隨着多語種數據的所有值在同一領域,我可以不再區分它們屬於什麼語言進行索引。有沒有一種方法,使該指數看起來更像是這個?:

id 
i18n.nl.title 
i18n.en.title 
i18n.nl.description 
i18n.en.description 
i18n.nl.requirements 
i18n.en.requirements 

Basicly我想HashMap的鍵值添加到索引字段名稱。我已經研究了將地圖視爲具有自定義FieldBridge的字段的可能性,但這看起來並不是正確的方法。

回答

0

如果您想讓索引字段看起來像您所描述的那樣,請使用自定義字段橋。這就是你可以得到這個結構的原因,但是因爲你的地圖值非常複雜,所以需要相當多的自定義代碼來創建所有的字段。

您可以爲Hibernate Search here創建功能請求。我可以想象這種類型的功能將會被廣泛使用。基本上,通過@IndexedEmbedded選項或通過附加註釋來定義映射關鍵字如何成爲Lucene字段名稱的一部分。那就是說,你有沒有想過你會如何在這個索引中搜索?用戶是否以某種方式指定了區域設置,並根據這個本地區域來定位相應的區域?另外,您如何處理根據語言類型配置不同詞幹的方法?

+0

那麼我猜它是一個FieldBridge。我不認爲地圖的結構太複雜,儘管所有的值都是String類型,否則沒有理由讓它們成爲多語言對象的一部分。我想我可以做一個自定義註釋來識別哪些字段添加到索引。 關於您的其他問題,我目前正在採取這一步,我的第一步是創建一個合適的索引。目前,它只需要一次搜索一種語言。儘管如stemming和其他過濾器的選項必須考慮。 –

相關問題