Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Cara mengatur struktur indeks ElasticSearch dengan beberapa binding entitas

Itu awal yang bagus!

Saya pasti akan meratakan semuanya (yaitu denormalisasi ) dan buat dokumen produk yang terlihat seperti di bawah ini. Dengan begitu Anda menghilangkan hubungan N:M antara produk dan flag hanya dengan membuat flags array untuk setiap produk. Dengan demikian akan lebih mudah untuk menanyakan tanda tersebut.

{
   "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"]
}

Jenis pemetaan produk akan terlihat seperti ini:

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"
                }
            }
        }
    }
}

Karena Anda memiliki jdbc logstash masukan sudah, semua yang Anda lewatkan adalah kueri SQL yang tepat untuk mengambil produk dan tanda terkait.

  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

Yang akan membuat Anda mendapatkan baris seperti ini:

+-------------------------------+-------+-------+---------------------+
| id                            | title | price | flags               |
+-------------------------------+-------+-------+---------------------+
| 00c8234d71c4e94f725cd432ebc04 | Alpha |   589 | Sellout,Top product |
| 018357657529fef056cf396626812 | Beta  |   355 | Discount            |
| 01a2c32ceeff0fc6b7dd4fc4302ab | Gamma |     0 | Discount            |
+-------------------------------+-------+-------+---------------------+

Dengan menggunakan filter Logstash, Anda kemudian dapat membagi flags ke dalam array dan Anda siap melakukannya.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Driver JDBC MySQL 5.1.33 - Masalah Zona Waktu

  2. Cara Instal MySQL dengan phpMyAdmin di Debian 7

  3. mySQL Error 1040:Terlalu Banyak Koneksi

  4. perbarui beberapa baris menggunakan batas di mysql?

  5. 1114 (HY000):Meja sudah penuh