Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak skonfigurować strukturę indeksu ElasticSearch z wieloma powiązaniami encji?

To świetny początek!

Zdecydowanie spłaszczyłbym to wszystko (tj. denormalizuj ) i wymyśl dokumenty produktu, które wyglądają jak ta poniżej. W ten sposób pozbędziesz się relacji N:M między produktami a flagami, po prostu tworząc flags tablica dla każdego produktu. Dzięki temu łatwiej będzie odpytywać te flagi.

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

Typ mapowania produktu wygląda tak:

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

Ponieważ masz dziennik jdbc danych wejściowych, brakuje tylko właściwego zapytania SQL do pobrania produktów i powiązanych flag.

  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

Co dałoby ci wiersze takie jak te:

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

Używając filtrów Logstash, możesz następnie podzielić flags w tablicę i gotowe.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak ponownie zsynchronizować bazę danych Mysql, jeśli Master i Slave mają inną bazę danych w przypadku replikacji Mysql?

  2. Menu drzewa budowania PHP / MySQL

  3. MySQL a MongoDB

  4. Jak przeliczyć liczbę tygodni na datę?

  5. Paginacja PHP i MySQL