[英]How can I best apply Hibernate-Search in this case?
我有一個Product
實體和一個表,並且希望數據庫設計允許通過其名稱之外的其他關鍵字來查找產品,也就是說,像使用同義詞庫一樣,也應通過關鍵字“ camcorder”找到產品名稱“ HDR-TD20V” ”,“攝像機”,“攝像機”等。請注意,可以使用相同的機制從不同的輸入語言中查找相同的記錄,例如,還應查找“ camara de video”(西班牙語)或“ videokamera”(德語)找到相同的記錄。
假設我正在使用Hibernate-search即Lucene,我有以下兩種設計選擇:
Product
表的keywords
列包含該產品的逗號分隔關鍵字。 這顯然違反了“ 第一范式 ”……每個屬性的值僅包含該域中的一個值。 但是,這將與Hibernate-search很好地集成在一起。 Keyword
實體表,即Keyword(id,keyword,languageId)
和多對多關聯ProductKeyword(productId,keywordId)
但是與Hibernate-Search的集成不再那么直觀...除非例如我創建select * from Product p, Keyword k, ProductKeyword pk where p.id=pk.productId and k.id=pk.keywordId
化視圖,即select * from Product p, Keyword k, ProductKeyword pk where p.id=pk.productId and k.id=pk.keywordId
並為此select * from Product p, Keyword k, ProductKeyword pk where p.id=pk.productId and k.id=pk.keywordId
索引。 我當然更喜歡選擇2,但是我不確定Hibernate-search如何以最佳方式涵蓋此用例。
這樣的事情應該起作用:
@Indexed
public class Product {
@Id
private long id;
@ManyToMany
@IndexedEmbedded
Set<Keyword> keywords;
// ...
}
public class Keyword {
@Id
private long id;
// only needed if you want a bidirectional relation
@ManyToMany
@ContainedIn
Set<Product> products;
// ...
}
我省略了延遲加載等的選項。JPA映射的確切外觀取決於用戶情況
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.