Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Cách thiết lập cấu trúc chỉ mục ElasticSearch với nhiều liên kết thực thể

Đó 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.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL tương đương STUFF () trong SQL Server là gì?

  2. Sử dụng MySQL với Entity Framework

  3. Cài đặt nhiều phiên bản MySQL trên máy chủ Linux - sử dụng tệp cấu hình MySQL riêng biệt

  4. Khắc phục:MySQL - Lệnh CHỌN bị từ chối đối với người dùng

  5. Lỗi MySQL 1264:giá trị ngoài phạm vi cho cột