Come funziona l'indicizzazione in magento


30
  1. Come funziona l'indicizzazione in Magento
  2. Cosa fa esattamente?
  3. Perché è richiesto?

Questo link: stackoverflow.com/questions/4945307/… dovrebbe aiutarti
TBI Infotech

Ecco come i suoi processi e azioni in Magento 2 magento.stackexchange.com/questions/90510/…
Yogesh Trivedi

Quale versione di Magento stai usando? Sono state apportate molte modifiche nella v1.13, quindi aspettatevi differenze nella versione precedente a quella versione. Ecco un bel post sul blog che spiega il modulo mView e l'indicizzazione nella versione 1.13 di Magento: eschrade.com/page/…
Pitt,

Risposte:


63

Esistono diversi tipi di indici in Magento.
Tutti gli indicizzatori sono lì per rendere le cose più veloci.
Tratterò qui solo alcuni di essi.

Indice piatto
Ci sono 2 di tali indici. Uno per le categorie e uno per i prodotti.
Per impostazione predefinita, la categoria e le entità del prodotto (e gli indirizzi dei clienti e dei clienti, ma non sono importanti in questa situazione) sono entità EAV . Questo è molto bello per l'estensibilità. Ma è un killer delle prestazioni perché per ottenere tutti i valori per tutti gli attributi sono necessari molti join o più query.
Qui è dove entra in gioco l'indicizzatore piatto.
Trasforma la struttura EAV in una struttura piatta. Voglio dire, crea una tabella (una per ogni punto vendita in Magento) che ha una colonna corrispondente ad un attributo. Questo rende le selezioni più veloci. Per le categorie tutti gli attributi vengono convertiti in colonne di tabella. Per i prodotti solo quelli contrassegnati come "Utilizzati nell'elenco dei prodotti" perché è possibile vendere tutti i tipi di prodotti con attributi diversi e la creazione di una tabella con colonne Gazillion potrebbe non essere possibile.
Inoltre, alcuni prodotti potrebbero essere disabilitati o non appartenere a un determinato sito Web e non è necessario includerli nelle voci per la ricerca. Sono esclusi dall'indicizzatore.
Le tabelle piane generate vengono utilizzate per leggere i dati nella fronend. Il back-end utilizza ancora la struttura EAV.

Ricerca nel catalogo Indice
È possibile cercare prodotti in base a numerosi valori di attributo. Alcuni di essi potrebbero non essere inclusi nelle tabelle flat generate dall'indicizzatore flat. Questo indice riempie una tabella con i valori degli attributi ricercabili per i prodotti, quindi è più facile cercarli in base alle parole chiave. Avere tutte le informazioni in una tabella (o in un campo) consente di utilizzare la ricerca full-text e ottenere risultati pertinenti.

Prezzi del prodotto .
Il prezzo di un prodotto può essere influenzato da molte variabili. Ad esempio, gruppo di clienti, sito Web, regole di sconto del catalogo.
Come sopra, ottenere i prodotti con i loro prezzi significherà molti join o selezioni multiple. Inoltre, i prodotti in bundle hanno uno strano sistema di prezzi. Questo indicizzatore aggrega i dati in alcune tabelle ( catalog_product_index_price_*) e semplifica notevolmente le selezioni (ordinamento e filtro).

Catalog url Rewrites
Cancella le regole di riscrittura dell'URL impostando quale url corrisponde a quale prodotto o categoria. In questo modo è più semplice per il sistema interno di gestione degli url decidere quale pagina visualizzare quando si chiama un url non standard. Invece di cercare tra tutte le chiavi URL di prodotto e categoria, cerca solo in una tabella.

Prodotti di categoria
In Magento puoi impostare un attributo di categoria chiamato 'Is Anchor' su true o false. Se è vero, significa che la categoria in questione elencherà tutti i prodotti delle categorie secondarie. Ancora una volta, determinando questo tempo reale ci vorranno più risorse rispetto alla sola lettura di un tavolo. Questo indicizzatore crea l'associazione tra prodotti e categorie in base alle associazioni impostate nel back-end e al flag "Is Anchor" sulle categorie.

Stato delle scorte
Per prodotti semplici è facile. Possono essere disponibili o esauriti, ma configurabili, raggruppati e raggruppati non è così semplice. Possono essere disponibili o esauriti a seconda dei prodotti figlio associati al prodotto principale. Ancora una volta (sto solo ripetendo me stesso qui) ottenere il loro stato in tempo reale significherebbe molte domande.

Attributi del prodotto .
Questo raccoglie tutti gli attributi che possono essere utilizzati nella navigazione a più livelli per lo stesso motivo. Avere tutti in un unico posto per una lettura più veloce.

Aggregazione di tag
Non ho idea di cosa faccia. Non ho mai usato i tag in un vero progetto dal vivo.


grazie Marius, questa è la risposta migliore ... Ho ricevuto
Sonam,

Cosa intendevi quando hai detto che i tavoli piatti sono usati solo nel frontend (e il backend usa ancora la struttura EAV)? Sono un principiante, e da quello che ho capito, quando creiamo / aggiorniamo entità come prodotti, utilizza ancora le tabelle EAV per fare queste operazioni e dobbiamo impostare l'opzione per aggiornare le tabelle piatte al momento del salvataggio o aggiornarle manualmente per queste modifiche si riflettono nelle tabelle piane. Ti riferisci a questo processo quando lo hai detto? Potresti approfondire questo per favore? Grazie!
Bharadwaj Srigiriraju,

1
@Marius: durante la reindicizzazione, viene visualizzato l'errore completo della tabella. Per favore aiuto. L'errore che sto ricevendo è La tabella "catalog_product_index_price_bundle_sel_tmp" è piena
zed Barbanera

1
@Marius dopo 3 anni di questa risposta ora hai idea di Aggregazione dei tag, è correlato ai tag del prodotto ??
Murtuza Zabuawala,

1
@Nero. Hai 2 impostazioni per gli indici. "Aggiorna al salvataggio" e "Manuale". Per l'aggiornamento sul salvataggio, tutto dovrebbe avvenire automaticamente quando si salva il prodotto. Ma ciò può causare problemi di prestazioni. Ad esempio se si cambiano più prodotti contemporaneamente. Per la modalità manuale, nessuna reindicizzazione viene avviata immediatamente dopo il salvataggio, ma al termine è necessario ricostruire manualmente.
Marius

11

Non posso prendermi il merito per questo dato che è preso dal post originale all'indirizzo: https://stackoverflow.com/questions/4945307/can-someone-explain-magentos-indexing-feature-in-detail

L'indicizzazione di Magento è simile solo all'indicizzazione a livello di database nello spirito. Come afferma Anton, è un processo di denormalizzazione per consentire un funzionamento più rapido di un sito. Vorrei provare a spiegare alcuni dei pensieri alla base della struttura del database Magento e perché rende necessaria l'indicizzazione per operare a velocità.

In un database MySQL più "tipico", una tabella per la memorizzazione dei prodotti del catalogo sarebbe strutturata in questo modo:

PRODUCT:
    product_id INT
    sku        VARCHAR
    name       VARCHAR
    size       VARCHAR
    longdesc   VARCHAR
    shortdesc  VARCHAR
    ... etc ...

Questo è veloce per il recupero, ma lascia un problema fondamentale per un pezzo di software di e-commerce: cosa fai quando vuoi aggiungere più attributi? Che cosa succede se vendi giocattoli e, anziché una colonna di dimensioni, hai bisogno di age_range? Bene, potresti aggiungere un'altra colonna, ma dovrebbe essere chiaro che in un grande negozio (ad esempio Walmart, ad esempio), ciò comporterebbe righe vuote al 90% e tentare di mantenere nuovi attributi è quasi impossibile.

Per combattere questo problema, Magento divide le tabelle in unità più piccole. Non voglio ricreare l'intero sistema EAV in questa risposta, quindi per favore accetta questo modello semplificato:

PRODUCT:
    product_id INT
    sku        VARCHAR

PRODUCT_ATTRIBUTE_VALUES
    product_id   INT
    attribute_id INT
    value        MISC

PRODUCT_ATTRIBUTES
    attribute_id
    name

Ora è possibile aggiungere attributi a piacere inserendo nuovi valori in product_attributes e quindi inserendo i record adiacenti in product_attribute_values. Questo è fondamentalmente ciò che fa Magento (con un po 'più di rispetto per i tipi di dati di quelli che ho mostrato qui). In effetti, ora non c'è motivo per cui due prodotti abbiano campi identici, quindi possiamo creare interi tipi di prodotto con diversi set di attributi!

Tuttavia, questa flessibilità ha un costo. Se voglio trovare il colore di una camicia nel mio sistema (un esempio banale), devo trovare:

  1. Il product_id dell'articolo (nella tabella del prodotto)
  2. Nome_attributo per colore (nella tabella degli attributi)
  3. Infine, il valore effettivo (nella tabella attributo_valori)

Magento lavorava in questo modo, ma era molto lento. Quindi, per consentire prestazioni migliori, hanno fatto un compromesso: una volta che il proprietario del negozio ha definito gli attributi desiderati, andare avanti e generare il grande tavolo dall'inizio. Quando qualcosa cambia, annulla lo spazio e generalo di nuovo. In questo modo, i dati vengono archiviati principalmente nel nostro bel formato flessibile, ma interrogati da un'unica tabella.

Queste tabelle di ricerca risultanti sono gli "indici" di Magento. Quando si reindicizza, si sta facendo saltare in aria la vecchia tabella e generandola di nuovo.

Spero che chiarisca un po 'le cose!


nuke it from space, bello :)
Wietse,

5

Magento è un sistema piuttosto potente e complesso. Permette di lavorare con enormi quantità di dati, ma quando il database è sovraccarico di tonnellate di record diventa pesante e lento. Magento utilizza gli indici per risolvere questo problema. Gli indici sono tabelle di database aggiuntive con alcuni dati semplici, che consente di organizzare risposte rapide dal database.

Per impostazione predefinita, il sistema principale aggiorna gli indici sul salvataggio di ciascun elemento. Ma in alcuni casi è necessario farlo manualmente, ad esempio alcuni tipi di azioni di massa, ecc. È possibile aggiornare gli indici in qualsiasi momento dal back-end dell'amministratore (Amministratore-> Sistema-> Gestione indice). Ma a volte causa problemi.

Ad esempio, se hai 10k + prodotti e molte categorie, la ricostruzione dell'indice "catalog url rewrite" potrebbe richiedere ore. Quindi lo script php può semplicemente rompersi a causa del superamento di max_execution_time. C'è un modo per risolvere diversi problemi eseguendo il processo reindex dalla riga di comando.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.