Elasticsearch:在单个查询中搜索两个不同的文档

时间:2018-09-27 16:38:45

标签: java spring-boot elasticsearch spring-data

我有两个实体“商家”和“客户”:

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从关系数据库中提取实际对象。

我进行了很多搜索,但是找不到任何可以帮助您评估这是否是一个好习惯的信息。这是个好习惯吗?

如果有更好的方法,请给我提示。

1 个答案:

答案 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

,这是另一种可能的方法