La recherche dans un site Drupal avec SearchAPI

La recherche est un élément primordial dans un site web.

Les moteurs d'indexation tel que SolR ou ElasticSearch ont la puissance nécessaire pour répondre aux demandes fortes de recherche de nos clients et de simplicité d'utilisation des internautes. Cependant, la mise en place d'un tel moteur d'indexation a un coût important. Il existe sous Drupal une solution alternative à moindre coût. Nous utilisons pour cela un moteur d'indexation en base de données.

Ce moteur d'indexation est fournit par le module search_api_db. Cette API permet de mettre en place une recherche FullText et à facette dans un site Drupal en stockant les indexes en base de données.

Choix et configuration du fournisseur de service de recherche

Installation des modules search_api et search_api_db

Quelque soit le moteur d'indexation utilisé, il est nécessaire d'installer le module search_api

vagrant@kameleon-debian: /var/www/drupal7 $ drush en search_api
The following extensions will be enabled: search_api, entity
Do you really want to continue? (y/n): y
entity was enabled successfully. [ok]
search_api was enabled successfully. [ok]
search_api defines the following permissions: administer search_api
The Search API module was installed. A new default node index was created. [status]

Une fois ce module installé, le menu "Configuration" > "Search  and Metadata" >"Search api" apparaît dans le BO du site.

Cependant, nous ne pouvons pas ajouter de serveur : en effet, il faut maintenant installer le provider de recherche.

La création d'un serveur est impossible à cause de l'absence de provider de recherche

Il existe plusieurs provider de recherche notamment pour Solr ou ElasticSearch (voir https://www.drupal.org/node/1999262#service-classes)

Cependant, dans l'exemple ci-dessous, le provider utilisé est search_api_db : les contenus sont indexés en base de données.

vagrant@kameleon-debian: /var/www/drupal7 $ drush en search_api_db
The following extensions will be enabled: search_api_db
Do you really want to continue? (y/n): y
search_api_db was enabled successfully. [ok]

Création d'un serveur

La page de création d'un serveur est maintenant disponible : il convient ici de choisir le provider de recherche DatabaseServer

Création et configuration d'un index

L'opération suivante est la création d'un index basé sur le serveur créé ci-dessus "Database Serv"

Nous choisissons d'indexer des nœuds : il faut sélectionner la valeur "Node" dans le champ "Item type"

 

Une fois l'index créé, il faut configurer les champs et les filtres de ce champ.

Pour les champs de type complexe comme le body, l'auteur... , il est possible d'indexer un élément spécifique du champ. Dans notre cas, l'élément body:value a été indexé. Pour ce faire, il faut utiliser l'option "Add Related Fields"

Création d'une vue basée sur cet index

Installation des modules views et search_api_views

Une fois l'index créé, nous allons créer un vue pour restituer les contenus indexés. Premier étape, il faut installer le module views

vagrant@kameleon-debian: /var/www/drupal7 $ drush en views
The following extensions will be enabled: views
Do you really want to continue? (y/n): y
views was enabled successfully. [ok]
views defines the following permissions: administer views, access all views

Pour créer une vue basée sur un index, il est nécessaire également d'activer le module search_api_views

vagrant@kameleon-debian: /var/www/drupal7 $ drush en search_api_views
The following extensions will be enabled: search_api_views
Do you really want to continue? (y/n): y
search_api_views was enabled successfully. [ok]

Création de la vue

Dans la page de création d'une vue, nous allons choisir d'afficher Node Index.

La page ainsi créée liste les contenus indexés dans l'index "Node index".

Ajout d'un filtre de recherche plein-text

Ensuite, une page de recherche ne serait rien sans un champ de recherche : pour ajouter ce champ, il faut créer le filtre "Search : FullTextSearch"

A noter, seuls les champs indexés en FullText peuvent être utilisés dans le filtre "FullTextSearch"

Ce champ permet de faire une recherche plein-text sur les champs de type FullText indexé, dans notre cas, le titre et le body.

 

Utilisation des facettes

Installation des modules facetapi et search_api_facetapi

La puissance de cette recherche se trouve également dans l'utilisation de filtres à facette. Pour ce faire, il faut activer les modules search_api_facetapi et facetapi

vagrant@kameleon-debian: /var/www/drupal7 $ drush en facetapi
The following extensions will be enabled: facetapi, ctools
Do you really want to continue? (y/n): y
ctools was enabled successfully. [ok]
ctools defines the following permissions: use ctools import
facetapi was enabled successfully. [ok]
facetapi defines the following permissions: administer facets
vagrant@kameleon-debian: /var/www/drupal7 $ drush en search_api_facetapi
The following extensions will be enabled: search_api_facetapi
Do you really want to continue? (y/n): y
search_api_facetapi was enabled successfully. [ok]

 

Dans la page de configuration de l'index, un nouveau menu apparaît "Facets". Nous pouvons choisir ici les champs servant de filtre à facettes. Nous choisissons ici l'auteur et les tags.

Pour chaque filtre, un bloc a été créé : il faut configurer le bloc pour l'affiche sur la page de recherche

Conclusion

Nous avons donc créé une page de recherche avec un champ de recherche FullText et des filtres à facette basés sur un index en base de données. Il est possible de configurer l'index de façon plus poussé avec les filtres, les tris.

Cette solution simple peut être utilisée pour des sites moyens. Pour des sites de plus grandes envergures, un moteur d'indexation indépendant doit être utilisé pour une meilleur performance

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Captcha *