Drupal Search
Published by thomasroger76 in drupal-skills
What this skill does
Use when implementing site search with Search API module, configuring search indexes (fields to index, processors), connecting to Solr backend (solr module, schema.xml, field mapping), connecting to Elasticsearch or OpenSearch backend, building search pages with Views + Search API, implementing faceted search with the Facets module, creating custom Search API processors for data transformation or query alteration, configuring multilingual search (langcode, language-specific analyzers), debugging
Add Drupal Search to your agent
Review the source and files first. When you are ready, copy the prompt instruction or use the CLI command supported by your environment.
Install with a prompt
Paste this into a compatible coding agent:
add this skill "drupal-search" from https://github.com/thomasroger76/drupal-skillsInstall with the CLI
Run this command in a controlled environment after reviewing the repository:
npx skills add https://github.com/thomasroger76/drupal-skills --skill drupal-searchSkill instructions
Drupal Search — Search API & Full-Text Search — Référence Complète
Overview
Référentiel complet de Search API Drupal 8-11+ : configuration des indexes, backends (Database, Solr, Elasticsearch/OpenSearch), Views + Search API, Facets, processors custom PHP, multilingual search, autocomplete, debugging. Search API est le standard de facto — Solr est le backend dominant en production agence française (4/20 projets). Facets module est utilisé dans 60%+ des projets.
Fichiers de référence avec code PHP : processors custom complets dans custom-processors.md, config Solr détaillée dans solr-integration.md, facettes dépendantes dans facets.md.
🎯 La Règle Fondamentale
Search API, pas le module
searchcore. Le modulesearchcore est limité à une recherche plein texte basique sur les nœuds. Search API indexe n'importe quelle entité, supporte des backends scalables (Solr, Elasticsearch), s'intègre nativement à Views, et supporte les facettes.
Choisir le Backend
| Backend | Cas d'usage | Avantages | Inconvénients |
|---|---|---|---|
| Database (core) | Dev local, petits sites (<5000 items) | 0 infra | Pas de relevance scoring, lent |
| Solr | Sites de taille moyenne à grande | Relevance, facettes, multilingue | Infra Solr nécessaire |
| Elasticsearch/OpenSearch | Sites très large échelle, analytics | Scalabilité, aggregations | Configuration complexe |
Règle : Database en développement, Solr en production pour tout site > 5000 entités indexées.
Quick Decision Table
| Besoin | Outil | Référence |
|---|---|---|
| Créer un index Search API | /admin/config/search/search-api/add-index | search-api-setup.md |
| Choisir les champs à indexer | Index → Fields tab — ajouter les champs pertinents | search-api-setup.md |
| Indexer les champs des entités référencées | Index → Fields → Add related fields | search-api-setup.md |
| Configurer les processors (HTML filter, Tokenizer) | Index → Processors tab | search-api-setup.md |
| Lancer l'indexation complète | drush sapi-i (search-api:index) | search-api-setup.md |
| Vider et réindexer | drush sapi-c && drush sapi-i | search-api-setup.md |
| Statut de l'indexation | drush sapi-s (search-api:status) | search-api-setup.md |
| Connecter un backend Solr | Module search_api_solr + configurer le server | solr-integration.md |
| Configurer Solr dans Docker | Service Solr + core Drupal spécifique | solr-integration.md |
| Générer le schéma Solr depuis Drupal | drush solr-gsc (generate-solr-config) | solr-integration.md |
| Connecter Elasticsearch | Module elasticsearch_connector | elasticsearch.md |
| Page de recherche avec résultats | Views — ajouter une "Search API Index" View | search-views.md |
| Exposer la recherche plein texte | Views → Exposed filter → Search API Fulltext | search-views.md |
| Filtrer par content type dans Views search | Views → filter sur type | search-views.md |
| Facettes (filtres à cocher) | Module facets + Views + Search API | facets.md |
| Facette sur taxonomy term | Facets → field field_tags → term facet | facets.md |
| Facette avec count (32) à côté | Facets → afficher le count de résultats | facets.md |
| Facettes dépendantes (hiérarchiques) | Facets — URL processors + Dependent Facets | facets.md |
| Transformer les données à l'indexation | Custom DataAlterCallback processor | custom-processors.md |
| Modifier la query Search API | Custom SearchApiQuery hook ou QueryPreprocessorInterface | custom-processors.md |
| Boost de relevance par champ | Solr → field boost, ou Search API field weight | solr-integration.md |
| Recherche multilingue (analyseurs par langue) | Search API Solr + Language Fallback processor | solr-integration.md |
| Autocomplete dans le champ de recherche | drupal/search_api_autocomplete module | search-api-setup.md |
| Highlighting des termes recherchés | Solr → Excerpt processor (HTML avec balises <em>) | solr-integration.md |
| Recherche phonétique (soundex, metaphone) | Solr — phonetic field type dans schema | solr-integration.md |
| Search API sans Views (API PHP) | Index::query() + QueryInterface | custom-processors.md |
| OpenSearch / AWS OpenSearch backend | drupal/elasticsearch_connector 8.x (ES + OpenSearch) OU drupal/search_api_opensearch (AWS) — jamais les deux | elasticsearch.md |
| Tolérance aux fautes de frappe (fuzzy search) | Solr — lowercaseFilter + phonetic OU edgeNGram tokenizer | solr-integration.md |
| Tracking des requêtes de recherche | drupal/search_api_stats — logs et rapports des termes recherchés | search-api-setup.md |
| Recherche "did you mean" (suggestions) | Solr SpellCheck component — configurer dans solrconfig.xml + Search API Solr settings → "Spellcheck" | solr-integration.md |
| Synonymes dans la recherche | Solr synonym.txt dans la config du schema | solr-integration.md |
| Réindexer automatiquement après mise à jour | drupal/search_api_solr → Index automatique via Queue Worker à la sauvegarde d'entité | search-api-setup.md |
| Filtrer les résultats par permissions Drupal | Search API Processor Content Access — obligatoire sur tout site avec accès restreint | search-api-setup.md |
| Search API avec filtres géographiques (geosearch) | drupal/geofield + Search API champ geofield + Solr RPT handler | custom-processors.md |
| Processor custom : annotation ou attribut PHP ? | @SearchApiProcessor (annotation Doctrine) — PAS d'attribut #[], le module n'a pas migré | custom-processors.md |
Anti-Patterns Critiques
| ❌ À ne jamais faire | ✅ Bonne pratique | Impact |
|---|---|---|
Module search core pour des besoins avancés | Search API + backend approprié | Pas de facettes, relevance, multilingue |
| Indexer TOUS les champs sans réflexion | Sélectionner uniquement les champs utiles à la recherche | Index trop lourd, indexation lente |
| Backend Database en production (> 5000 entités) | Solr ou Elasticsearch | Requêtes lentes, pas de relevance scoring |
drush sapi-i sans drush sapi-c après changement de schéma | Vider l'index avant de réindexer | Données obsolètes dans l'index |
| Schema Solr généré manuellement | drush solr-gsc puis copier dans Solr | Schema incorrect, indexation partielle |
| Views Search sans pagination | Toujours paginer — 10 ou 20 résultats | Pages très lentes, timeout |
| Facette sans filtre "0 results" | Configurer "Min count = 1" dans Facets | Facettes vides affichées |
| Indexation des révisions non publiées | Processor Content Access pour filtrer | Contenu draft visible dans les résultats |
| Cron désactivé pour l'indexation auto | Configurer le cron Drupal (drush cron) | Nouveaux contenus non indexés |
| Recherche sans Content Access processor | Toujours activer Content Access | Contenu privé visible dans les résultats |
Évolution par Version Majeure
| Feature | D8 | D9 | D10 | D11 |
|---|---|---|---|---|
| Search API (contrib) | ✅ | ✅ | ✅ | ✅ |
| Search API Solr (contrib) | ✅ | ✅ | ✅ | ✅ |
| Facets module (contrib) | ✅ | ✅ | ✅ | ✅ |
| Search API Autocomplete | ✅ | ✅ | ✅ | ✅ |
| Elasticsearch Connector | ✅ | ✅ | ✅ | ✅ |
drush sapi-i/c/s | ✅ | ✅ | ✅ | ✅ |
| Views + Search API | ✅ | ✅ | ✅ | ✅ |
| Search API Solr 4.x (D10+) | ❌ | ❌ | ✅ | ✅ |
| Database backend (core Search API) | ✅ | ✅ | ✅ | ✅ |
Auto-Amélioration
- lessons.md — Problèmes d'indexation et de configuration rencontrés en projet.
- CHANGELOG.md — Historique des versions.
See Also
solr— Administration Solr autonome (cores, schema, solrconfig, tuning JVM) au-delà de l'intégration Drupaldrupal-views— Views + Search API, exposed filters search, facets dans Viewsdrupal-docker— Service Solr Docker, Elasticsearch Dockerdrupal-performance— Cache des résultats de recherche, Varnish + Searchdrupal-multilingual— Recherche multilingue, analyseurs par langue dans Solrdrupal-config— Exporter/importer la config Search API, indexes, serversdrupal-core— Cron (indexation auto), hook_search_api_query_alter()
Files included
- CHANGELOG.md
- custom-processors.md
- elasticsearch.md
- facets.md
- lessons.md
- search-api-setup.md
- search-views.md
- SKILL.md
- solr-integration.md

