我有两个实体“商家”和“客户”:
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
}
这两个实体彼此之间明显不同。
我要做的是,当我用“约翰”一词搜索时,我想同时获得一个名为“约翰市场”的商人和一个名为“约翰·史密斯”的顾客。
为此,我将这些实体编入了单个索引。
@Document(indexName = "merchant_customer_index", type = "merchantorcustomer")
public class MerchantOrCustomer {
@Id
private UUID id;
private String name;
private int type;
//...
我的查询可以同时返回商家和客户:
List<MerchantOrCustomer> result = elasticsearchTemplate.queryForList(nativeSearchQuery, MerchantOrCustomer.class);
我以程序化方式区分他们({if(result.get(i).getType() == 0
我们收到了商家else
客户)
然后使用其ID从关系数据库中提取实际对象。
我进行了很多搜索,但是找不到任何可以帮助您评估这是否是一个好习惯的信息。这是个好习惯吗?
如果有更好的方法,请给我提示。
答案 0 :(得分:0)
您所做的似乎没有什么错,除非@Ivan在评论中提到一些共谋。 如果您正在使用elasticTemplate- Spring Data Elasticsearch: Multiple Index with same Document或使用queryBuilder-https://www.elastic.co/guide/en/elasticsearch/client/java-api/current/java-search.html
,这是另一种可能的方法