In questo capitolo, presenteremo la ricerca full-text di MongoDB, che è diversa dall'operatore "like" di SQL. La ricerca full-text di MongoDB è più efficiente per la ricerca di testo rispetto all'implementazione di "like" in SQL.
Preparare i dati di test
Inserire alcuni record nella collezione degli store
db.stores.insert(
[
{ _id: 1, name: "Java Hut", description: "Caffè e torte" },
{ _id: 2, name: "Burger Buns", description: "Hamburger gourmet" },
{ _id: 3, name: "Coffee Shop", description: "Solo caffè" },
{ _id: 4, name: "Clothes Clothes Clothes", description: "Abbigliamento in saldo" },
{ _id: 5, name: "Java Shopping", description: "Prodotti indonesiani" }
]
)
Creare l'indice di testo
Per utilizzare la capacità di ricerca full-text, è necessario creare un indice di testo. Esempio:
db.stores.createIndex( { name: "text", description: "text" } )
Spiegazione:
- Creare un indice di tipo testo per i campi name e description.
Nota: Una collezione consente un solo indice di testo, ma un indice di testo può includere più campi.
Operatore $text
Usare l'operatore $text per la ricerca del testo.
Sintassi:
{ $text: { $search: "parola chiave di ricerca" } }
Esempio:
db.stores.find( { $text: { $search: "java coffee shop" } } )
Spiegazione:
- Cerca documenti contenenti le parole chiave "caffè", "negozio" e "java" nei campi name e description.
Output:
{ "_id" : 3, "name" : "Coffee Shop", "description" : "Solo caffè" }
{ "_id" : 1, "name" : "Java Hut", "description" : "Caffè e torte" }
{ "_id" : 5, "name" : "Java Shopping", "description" : "Prodotti indonesiani" }
Ricerca di Frase
db.stores.find( { $text: { $search: "\"coffee shop\"" } } )
Output
{ "_id" : 3, "name" : "Coffee Shop", "description" : "Solo caffè" }
Ordinamento per Rilevanza
Per impostazione predefinita, i risultati di una query $text non sono ordinati. La query $text calcola un punteggio (textScore) per la rilevanza di ogni documento. Possiamo utilizzare questo punteggio per ordinare e visualizzare i documenti con maggiore rilevanza in cima.
db.stores.find(
{ $text: { $search: "java coffee shop" } },
{ score: { $meta: "textScore" } } // Dichiarare di restituire il punteggio di rilevanza textScore
).sort( { score: { $meta: "textScore" } } ) // Specificare l'ordinamento utilizzando textScore
Nota: La ricerca full-text di MongoDB non fornisce un buon supporto per le frasi cinesi.