Sql в Elasticsearch Объединение данных - PullRequest
0 голосов
/ 03 марта 2020

Я создаю api rest приложения для торговой площадки с помощью Spring Boot и использую PostgreSQL. Есть продукты, добавленные администратором, и продавцы добавляют свои собственные спецификации к этим продуктам. Существует связь между продуктами и категориями, и есть связь между продуктами и спецификациями продуктов, также есть связь между продуктами и продавцами, и есть связь между спецификациями продуктов и продавцами. Мне нужно отфильтровать категории и продукты по продавцу, поэтому, если покупатель просматривает профиль продавца, я просто хочу указать категории продуктов продавца и их характеристики. Я пытаюсь реализовать это с PostgreSQL, но работает очень медленно. И я не хочу отношений между категориями и торговцами. Я думаю, что это может быть с Elasticsearch, какую структуру я должен использовать в Elasticsearch для этого. Если я создам такой документ, как «Продукты в Elasticsearch», и продукты включают всю категорию, продавцы и я фильтруем товары по торговцам, это будет хорошим способом?

Модели, которые я использую для PostgreSQL

Категория:

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;

@NotBlank
private String name;

@NotBlank
private String photoUrl;

private boolean subCategory;

private double commission;

@JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
@ManyToOne
@JoinColumn(name = "parent_id")
private Category parent;

@OneToMany(mappedBy = "parent",cascade = CascadeType.ALL, orphanRemoval = true)
@OrderBy("id desc")
private List<Category> childs;

@JsonIgnore
@OneToMany(mappedBy = "category",cascade = CascadeType.REMOVE, orphanRemoval = true, fetch = FetchType.LAZY)
@OrderBy("id desc")
private List<Product> products;

Продукт:

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;

private UUID uuid;

@NotBlank
@Column(unique = true)
private String name;

@NotNull
private double tax;

private String photoUrl;

@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "category_id",referencedColumnName = "id")
private Category category;

private boolean status;

private double commission;

@OneToMany(mappedBy = "product",cascade = CascadeType.ALL,orphanRemoval = true)
@OrderBy("id desc")
@EqualsAndHashCode.Exclude
private Set<ProductSpecify> productSpecifies;

@OneToMany(mappedBy = "product",cascade = CascadeType.ALL,orphanRemoval = true,fetch = FetchType.EAGER)
@OrderBy("id desc")
@EqualsAndHashCode.Exclude
private Set<Barcode> barcodes;

@ManyToMany
private List<User> users;

ProductSpecify:

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;

private UUID uuid;

@NotNull
private double totalPrice;

@NotNull
private double unitPrice;

@NotNull
private int quantity;

@NotNull
private double contents;

@NotNull
@Enumerated(EnumType.STRING)
private UnitType unitType;

private double commission;

@NotNull
private double recommendedRetailPrice;

@ManyToOne
@JoinColumn(name = "product_id",referencedColumnName = "id")
private Product product;

@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "user_id",referencedColumnName = "id")
private User user;

@ManyToMany(fetch = FetchType.EAGER)
private List<State> states;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...