Curso de Drupal 8 (XVII): Sistemas de búsqueda de contenido: Search API e integración con Apache Solr

En este capítulo vamos a ver cómo se realizan las búsquedas en Drupal y cómo optimizarlas.

El módulo search_api_solr

Este módulo nos permite realizar búsquedas desde solr en vez desde la BBDD

Pare ello tendremos que instalar el módulo con el comando:

composer require drupal/search_api_solr

Debido a un error en una de las dependencias en el momento de escribir esta guía deberemos ejecutar:

composer require symfony/event-dispatcher:“4.3.4 as 3.4.99” drupal/search_api_solr:^3.5

Después debremos habilitar el módulo search_api_solr

drush en search_api_solr

y el módulo search_api_solr_default, que nos facilitará la tarea de gestionar la conexión al servidor

drush en search_api_solr_defaults

Search API

A través de la url /admin/config/search/search-api podemos acceder al menú de configuración del módulo.

Desde aquí podemos configurar los dos elementos principales del Search API: el servidor y el índice.

Al principio los dos elementos nos aparecen configurados pero con un par de pasos podemos crearlos de golpe:

Aquí lo más importante es darle un nombre que es obligatorio y decir que debe registrar el servicio de la BBDD con un mínimo de 1 palabra y que debe buscar por partes de una sólo palabra.

También puede seleccionares el servicio que queremos usar, bien el de database o el de Solr.

De esta manera permite usar distintos servicios con una misma configuración.

Después configuraremos el índice de la búsqueda:

Aquí es donde deberemos colocarle un nombre al índice de contenidos dependiendo de lo que queramos indexar, relacionarlo con un servidor, el que indicamos anteriormente y configurar cuándo debe indexarse el contenido. Normalmente suele recomendarse que se marque la opción Index ítems immediately.

A mayores disponemos de varias pestañas en la parte superior derecha:

Aquí la parte más importante es la de los campos de la búsqueda que realizamos a través de la pestaña Fields:

Como puede verse podemos seleccionar todos los campos que nos interesen.

A la derecha debería aparecernos el tipo de indexado, en el tipo de contenido con seleccionar texto sería suficiente ya que internamente utiliza un nombre de sistema o nombre máquina y es o es igual o no lo es. Pero en el resto de campos deberemos seleccionar Fulltext para poder buscar internamente dentro del campo.

Después de configurar todos los campos a indexar bastaría con irnos a la vista y comprobar que está todo el contenido indexado:

Si no está el contenido indexado debería pulsar en el botón Index Now.

Integración con Apache Solr

Para arrancar Solr hemos modificado el fichero de docker-compose para arrancar el servidor de manera sencilla:

solr:
  image: solr:7
  volumes:
    #- ./env/solr/blog:/opt/solr/server/solr/blog
    #- ./solr:/opt/solr/server/solr
    - solrdata:/var/lib/solr
  ports:
    - "8983:8983"
  restart: always

Esto significa que el servidor debería estar arrancado en: http://localhost:8983/

Para configurar el indexado es necesario crear un core en el servidor de Solr que normalmente requiere pasar una configuración que hay como ejemplo en el módulo de search_api_solr, al directorio donde solr configura el core generado.

Si no siempre es posible gestionar desde el contenedor de solr:

solr create -c blog -n data_driven_schema_configs

Donde blog es el nombre que le damos al core que hay que configurar en drupal para que enganche con el servidor de solr.

Desde el Drupal deberíamos ir a la configuración del Servidor de Solr

/admin/config/search/search-api

Debería aparecer la configuración de solr si el servidor está arrancado

Referencias

Licencia Creative Commons

Esta obra está bajo una licencia Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.