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