Sono sicuro di conoscere la risposta a questa domanda, ma cerco conferme da qualcuno con più esperienza Elasticsearch di me.Le migliori pratiche per gestire le relazioni molti-a-molti in Elasticsearch?
Diciamo che ho un database contenente Autori e Libri. Un autore può essere associato a 0 o più libri e un libro può essere associato a uno o più autori. Vogliamo che gli utenti siano in grado di cercare il nome dell'autore per trovare l'autore e tutti i suoi libri, e vogliamo anche che siano in grado di cercare il titolo del libro per ottenere il/i suo/i autore/i. Sappiamo che ci saranno molti libri multi-autore.
Poiché Elasticsearch supporta solo direttamente un livello di relazioni padre-figlio e poiché i bambini possono avere un solo genitore, mi sembra che dobbiamo denormalizzare i dati e utilizzare oggetti nidificati per stabilire questa relazione. Se modifichiamo le proprietà di un autore che ha pubblicato 23 libri, avremo bisogno di reindicizzare il record dell'autore e tutti i 23 dei suoi registri dei libri.
Nel mio mondo fantasy, mi piacerebbe avere quei 23 libri contenenti ciascuno una serie di ID autore in modo da non dover reindicizzare i libri quando reindex gli autori. Sembra che questo sarebbe sicuramente possibile utilizzando il supporto genitore-figlio di Elasticsearch se un libro può avere solo un autore, ma a causa del requisito molti-a-molti, devo usare oggetti annidati e reindicizzare qualsiasi oggetto correlato ogni volta che qualcosa cambia .
È corretto? Sembra certamente più lavoro (e sicuramente più aggiornamenti), ma voglio farlo nel modo giusto, non nel modo "intelligente" che introduce complessità, bug e follia.
Qualsiasi consiglio sarebbe apprezzato.
Sì, è necessario denormalizzare. Ricordare che tutte le relazioni genitore-figlio forniscono lo zucchero sintattico per il parametro di instradamento che dirige un'operazione di ricerca o indice su un particolare frammento invece di colpire tutti i frammenti. È più un ottimizzazione delle prestazioni che uno strumento di modellazione. Dipende davvero da cosa hai bisogno al momento della query. –
@JoelP. hai trovato il miglior approccio giusto per evitare molti aggiornamenti? –