Đó là một khởi đầu tuyệt vời!
Tôi chắc chắn sẽ làm phẳng tất cả (tức là không chuẩn hóa ) và đưa ra các tài liệu sản phẩm giống như tài liệu bên dưới. Bằng cách đó, bạn loại bỏ mối quan hệ N:M giữa sản phẩm và cờ bằng cách chỉ cần tạo một flags
mảng cho từng sản phẩm. Do đó, sẽ dễ dàng hơn khi truy vấn các cờ đó.
{
"id": "00c8234d71c4e94f725cd432ebc04",
"title": "Alpha",
"price": 589.0,
"flags": ["Sellout", "Top Product"]
}
{
"id": "018357657529fef056cf396626812",
"title": "Beta",
"price": 355.0,
"flags": ["Discount"]
}
{
"id": "01a2c32ceeff0fc6b7dd4fc4302ab",
"title": "Gamma",
"price": 0.0,
"flags": ["Discount"]
}
Loại ánh xạ sản phẩm sẽ giống như sau:
PUT products
{
"mappings": {
"product": {
"properties": {
"id": {
"type": "string",
"index": "not_analyzed"
},
"title": {
"type": "string"
},
"price": {
"type": "double",
"null_value": 0.0
},
"flags": {
"type": "string",
"index": "not_analyzed"
}
}
}
}
}
Vì bạn có logstash jdbc
đầu vào rồi, tất cả những gì bạn còn thiếu là truy vấn SQL thích hợp để tìm nạp các sản phẩm và cờ liên quan.
SELECT p.Id as id, p.Title as title, p.Price as price, GROUP_CONCAT(f.Title) as flags
FROM Products p
JOIN flagsProducts fp ON fp.ProductId = p.Id
JOIN Flags f ON fp.FlagId = f.id
GROUP BY p.Id
Bạn sẽ nhận được những hàng như thế này:
+-------------------------------+-------+-------+---------------------+
| id | title | price | flags |
+-------------------------------+-------+-------+---------------------+
| 00c8234d71c4e94f725cd432ebc04 | Alpha | 589 | Sellout,Top product |
| 018357657529fef056cf396626812 | Beta | 355 | Discount |
| 01a2c32ceeff0fc6b7dd4fc4302ab | Gamma | 0 | Discount |
+-------------------------------+-------+-------+---------------------+
Khi sử dụng bộ lọc Logstash, bạn có thể chia các flags
vào một mảng và bạn đã sẵn sàng.