Immagina di avere un'applicazione di mercato - dove gli utenti possono cercare prodotti (ci concentriamo sui vestiti). Ogni prodotto ha un ID , nome (testo), descrizione (testo), prezzo (numerico), < strong> dimensione (numerico), marca, condizione e così via.
Gli utenti possono cercare vestiti. In questo momento i dati sono memorizzati in un database relazionale (PostgreSQL). Esiste un'istanza di Elasticsearch in esecuzione che viene utilizzata per la ricerca nei campi nome e descrizione (poiché sono campi di testo).
Problema: Voglio dare all'utente la possibilità di restringere la ricerca usando tutti i parametri - in modo che l'utente possa cercare per esempio una dimensione, una condizione e una descrizione specifiche.
Ci sono due approcci che vedo:
-
Implementazione di una miscela di Elasticsearch e ricerca nel database. Ciò significherebbe che filtrerei i dati in un unico punto e continueremo con i dati filtrati nell'altro posto per filtrarli di nuovo.
Vantaggio: utilizzare Elasticsearch per la ricerca full-text e l'utilizzo del database per una specifica "ricerca a colonna" poiché questo è ciò a cui entrambi sono abili. Come ottenere il meglio da entrambi i mondi.
Svantaggio: come determinare dove iniziare la ricerca? L'idea è ovviamente quella di avviare la ricerca nel punto in cui posso eliminare la maggior parte dei dati in modo che la seconda ricerca venga eseguita su un set di dati più piccolo.
Nota anche che l'istanza di Elasticsearch sarà sicuramente su un altro computer che PostgreSQL quindi stiamo parlando di overhead di rete e tempi di risposta più alti.
-
Solo con Elasticsearch. Sono assolutamente consapevole della capacità di PostgreSQL di eseguire ricerche di testo, ma questo non è affatto potente come Elasticsearch e inoltre non vi è alcuna garanzia che PostgreSQL sia sempre il DB di scelta.
Vantaggio: tutte le ricerche avvengono in un unico posto. Nessun risultato intermedio o simile.
Svantaggio: Elasticsearch è strong quanto i database relazionali in termini di filtraggio dei dati in base a un predicato. Si prega di notare che stiamo parlando di campi come dimensione e prezzo - campi numerici in cui la ricerca di testo non è ottimale ma una semplice clausola
WHERE
è super veloce.
Ci sono più vantaggi o svantaggi di entrambi gli approcci che mi mancano. Qualcosa di cruciale che potrebbe parlare a favore o contro l'uno o l'altro modo?