Prima di tutto, i tuoi dati dovrebbero essere rimodellati come di seguito:
{
name: "Burger",
ingredients: [
"bread",
"cheese",
"tomato",
"beef"
]
}
L'"Elemento" extra non aggiunge alcuna informazione aggiuntiva né aiuta in alcun modo l'accesso ai dati.
Successivamente, devi creare un indice di testo . I documenti lo affermano
Quindi facciamo semplicemente un
db.collection.ensureIndex({"ingredients":"text"})
Ora possiamo fare un $text
cerca
:
db.collection.find(
{ $text: { $search: "bread beef" } },
{ score: { $meta: "textScore" } }
).sort( { score: { $meta: "textScore" } } )
che dovrebbe fornirti i documenti più rilevanti.
Tuttavia, ciò che potresti anche fare è una ricerca non testuale per le corrispondenze dirette:
db.collection.find({ingredients:"beef"})
o per più ingredienti
db.collections.find({ ingredients: { $all: ["beef","bread"] } })
Quindi, per la ricerca per input dell'utente, puoi utilizzare la ricerca testuale e per la ricerca per ingredienti selezionati, puoi utilizzare la ricerca non testuale.