Elasticsearch: поиск двух разных документов в одном запросе - PullRequest
0 голосов
/ 27 сентября 2018

У меня есть две сущности Торговец и Клиент:

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;
    //...

Мой запрос может возвращать как Merchant, так и Customer:

List<MerchantOrCustomer> result = elasticsearchTemplate.queryForList(nativeSearchQuery, MerchantOrCustomer.class);

Я различаю их программно (if(result.get(i).getType() == 0 мы получили Merchant else Customer) Затем использую их id для извлечения фактического объекта из реляционной базы данных.

Я много искал, но не смог найти ничего, что могло бы помочь оценить, является ли это хорошей практикой.Это хорошая практика?

Пожалуйста, дайте мне подсказку, если есть лучший способ.

1 Ответ

0 голосов
/ 27 сентября 2018

Похоже, нет ничего плохого в том, что вы сделали, если только в комментариях нет упоминания @Ivan.Вот еще один возможный способ сделать это, если вы использовалиasticTemplate- Spring Data Elasticsearch: множественный индекс с одним и тем же документом или если вы используете queryBuilder - https://www.elastic.co/guide/en/elasticsearch/client/java-api/current/java-search.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...