gpt4 book ai didi

java - 在这种情况下我怎样才能最好地应用Hibernate-Search?

转载 作者:行者123 更新时间:2023-12-01 14:52:35 25 4
gpt4 key购买 nike

我有一个 Product 实体和表,并且希望数据库设计允许通过名称顶部的不同关键字查找产品,也就是说,就像使用同义词库一样,例如:产品名称“HDR-TD20V”还应该通过关键字“摄像机”、“相机”、“摄像机”等找到。请注意,可以使用相同的机制从不同的输入语言(例如英语)中定位相同的记录。查找“camara de video”(西类牙语)或“videokamera”(德语)也应该找到相同的记录。

假设我使用 Hibernate-search 即 Lucene,我有以下两种设计选择:

  1. 非规范化方法:Product 表有一个 keywords 列,其中包含该产品的以逗号分隔的关键字。这显然违反了First Normal Form “...每个属性的值仅包含来自该域的单个值。”。然而,这可以与 Hibernate-search 很好地集成。
  2. 标准化方法:定义一个Keyword实体表,即Keyword(id,keyword,languageId)和多对多关联ProductKeyword(productId,keywordId) 但与 Hibernate-Search 的集成不再那么直观......除非例如我创建一个物化 View ,即 select * from Product p, Keyword k, ProductKeyword pk where p.id=pk.productId and k.id=pk.keywordId 并为此物化 View 建立索引。

我当然更喜欢选择 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 映射的具体外观取决于用户案例

关于java - 在这种情况下我怎样才能最好地应用Hibernate-Search?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14693982/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com