簡體   English   中英

在這種情況下,如何最好地應用Hibernate-Search?

[英]How can I best apply Hibernate-Search in this case?

我有一個Product實體和一個表,並且希望數據庫設計允許通過其名稱之外的其他關鍵字來查找產品,也就是說,像使用同義詞庫一樣,也應通過關鍵字“ camcorder”找到產品名稱“ HDR-TD20V” ”,“攝像機”,“攝像機”等。請注意,可以使用相同的機制從不同的輸入語言中查找相同的記錄,例如,還應查找“ camara de video”(西班牙語)或“ videokamera”(德語)找到相同的記錄。

假設我正在使用Hibernate-search即Lucene,我有以下兩種設計選擇:

  1. 非規范化方法Product表的keywords列包含該產品的逗號分隔關鍵字。 這顯然違反了“ 第一范式 ”……每個屬性的值僅包含該域中的一個值。 但是,這將與Hibernate-search很好地集成在一起。
  2. 規范化的方法 :定義一個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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM