gpt4 book ai didi

elasticsearch - 无需嵌入索引即可在两个实体之间进行休眠搜索

转载 作者:行者123 更新时间:2023-12-03 02:30:12 24 4
gpt4 key购买 nike

我正在尝试使用Hibernate Search 6和Elastic Search
我尝试构建的一个简单示例如下。

我有一个Book实体,该实体具有titleauthorNamegenreprice之类的信息
我有一个Shop实体,该实体具有shopNamephoneemaillocation之类的信息
我有一个“联接表”,可以在角落和商店之间进行多对多映射。 (一本书可以在很多商店中,而一家商店可以有很多书)

我正在尝试按名称和位置进行搜索,最好在距输入内容最近的位置查找一本书。文档中的标准书籍作者示例需要IndexedEmbedded批注,在我的情况下这实际上是不可能的,因为我正在使用联接表。
是否有解决此问题的替代方法

最佳答案

我的实体

    @Indexed
public class Book extends PanacheEntity{
public String title;
public String authorName;
@OneToMany(mappedBy = "book", fetch = FetchType.LAZY, cascade = { CascadeType.REMOVE })
public List<BookShopRelation> bookShopRelation = new ArrayList<>();
}


@Indexed
public class Shop extends PanacheEntity{
public String name;
public String city;
@OneToMany(mappedBy = "shop", fetch = FetchType.LAZY, cascade = { CascadeType.REMOVE })
private List<BookShopRelation> bookShopRelation = new ArrayList<>();
}

@Indexed
public class BookShopRelation extends PanacheEntity{
@JoinColumn(name = "shop_id")
@ManyToOne(fetch = FetchType.EAGER, optional = false)
@IndexedEmbedded
private Shop shop;

@JoinColumn(name = "offer_id")
@ManyToOne(fetch = FetchType.EAGER, optional = false)
@IndexedEmbedded
private Book book;
}

对我来说,关键是要理解,关系表可以被索引并用作搜索的基础
 List<BookShopRelation> result = Search.session(entityManager)
.search(BookShopRelation.class) .predicate(f ->
pattern == null || pattern.trim().isEmpty() ?
f.matchAll() :
f.simpleQueryString()
.fields("book.title").matching(pattern)
)
.fetchHits(size.orElse(20));

关于elasticsearch - 无需嵌入索引即可在两个实体之间进行休眠搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60192572/

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