【发布时间】:2023-03-23 01:41:05
【问题描述】:
我有两个实体 Merchant 和 Customer:
public class Merchant{
private UUID id;
private String name;
//... other fields and getters/setters
}
public class Customer{
private UUID id;
private String name;
//... other fields and getters/setters
}
这两个实体明显不同。
我想要做的是,当我使用“John”这个词进行搜索时,我想同时获得一个名为“John Market”的商家和一个名为“John Smith”的客户。
为了实现这一点,我将这些实体编入了一个索引。
@Document(indexName = "merchant_customer_index", type = "merchantorcustomer")
public class MerchantOrCustomer {
@Id
private UUID id;
private String name;
private int type;
//...
我的查询可以返回 Merchant 和 Customer:
List<MerchantOrCustomer> result = elasticsearchTemplate.queryForList(nativeSearchQuery, MerchantOrCustomer.class);
我以编程方式区分它们(if(result.get(i).getType() == 0 我们收到了商家else 客户)
然后使用他们的 id 从关系数据库中提取实际对象。
我搜索了很多,但找不到任何可以帮助估计它是否是一个好习惯的东西。这是一个好习惯吗?
如果有更好的方法,请给我提示。
【问题讨论】:
-
如果具有相同
id的对象既是商家又是客户怎么办? -
我认为 id 是 UUID。所以,如果做得正确,应该很好。
-
@nitzien 我的意思是如果一个实体在应用程序中同时扮演两个角色会怎样:卖东西和买东西?然后我认为 elasticsearch 将只在索引中为给定的
id存储一个对象。 -
我现在同意@Ivan
标签: java spring-boot elasticsearch spring-data