Dans ce chapitre, nous allons présenter la recherche de texte intégrale de MongoDB, qui est différente de l'opérateur "like" de SQL. La recherche de texte intégrale de MongoDB est plus efficace pour la recherche de texte par rapport à la mise en œuvre de "like" en SQL.
Préparer les données de test
Insérer quelques enregistrements dans la collection des magasins
db.stores.insert(
[
{ _id: 1, name: "Java Hut", description: "Café et gâteaux" },
{ _id: 2, name: "Burger Buns", description: "Hamburgers gastronomiques" },
{ _id: 3, name: "Coffee Shop", description: "Juste du café" },
{ _id: 4, name: "Clothes Clothes Clothes", description: "Vêtements à prix réduits" },
{ _id: 5, name: "Java Shopping", description: "Produits indonésiens" }
]
)
Créer un index de texte
Pour utiliser la capacité de recherche de texte intégrale, vous devez créer un index de texte. Exemple:
db.stores.createIndex( { name: "text", description: "text" } )
Explication:
- Créez un index de type texte pour les champs name et description.
Remarque : Une collection ne permet qu'un seul index de texte, mais un index de texte peut inclure plusieurs champs.
Opérateur $text
Utilisez l'opérateur $text pour la recherche de texte.
Syntaxe:
{ $text: { $search: "mot-clé de recherche" } }
Exemple:
db.stores.find( { $text: { $search: "java coffee shop" } } )
Explication:
- Rechercher les documents contenant les mots-clés "café", "shop" et "java" dans les champs name et description.
Résultat:
{ "_id" : 3, "name" : "Coffee Shop", "description" : "Juste du café" }
{ "_id" : 1, "name" : "Java Hut", "description" : "Café et gâteaux" }
{ "_id" : 5, "name" : "Java Shopping", "description" : "Produits indonésiens" }
Recherche de phrase
db.stores.find( { $text: { $search: "\"coffee shop\"" } } )
Résultat
{ "_id" : 3, "name" : "Coffee Shop", "description" : "Juste du café" }
Tri par pertinence
Par défaut, les résultats d'une requête $text ne sont pas triés. La requête $text calcule un score (textScore) pour la pertinence de chaque document. Nous pouvons utiliser ce score pour trier et afficher les documents les plus pertinents en haut.
db.stores.find(
{ $text: { $search: "java coffee shop" } },
{ score: { $meta: "textScore" } } // Déclarer de retourner le score de pertinence textScore
).sort( { score: { $meta: "textScore" } } ) // Spécifier le tri en utilisant textScore
> Remarque : La recherche de texte intégrale de MongoDB ne fournit pas un très bon support pour les phrases chinoises.