Colorfield logo

Drupalicious

Published on

Lando configuration for Search API Solr with the Umami profile

Authors
Lando, Solr, Drupal logos

A walkthrough to join the dots between two posts about setting up Lando for Drupal and Solr for Drupal with Search API, and also a good opportunity to cover all the steps to spin up an evaluation or development environment for this setup.

For the best practices related to Search API and Solr, just install the Solr Search Defaults that ships with the Search API Solr module.
If you need an evaluation and are looking for an automated setup of Umami and Search API, have a look at the excellent Umami demo search repository maintained by Nick Veenhof, there is also a demo site available.

Lando comes with the great benefit to share the server configuration alongside the project, so we have a predictable environment to deploy in production without adding provisioning overhead on the team, especially in the case of more advanced setup like Solr, Varnish, decoupled environments, ... . It also offers faster provisioning compared to other solutions like Vagrant.

What follows assumes that you already have Composer, Docker and Lando installed. If Docker is not already installed, on Mac OSX use Homebrew.

brew cask install lando

If Docker is already installed without Homebrew, download the latest version of Lando on GitHub.

Step 1, create a Drupal project with Composer

Here is a one-liner. The community is doing a great job to keep Composer installation methods up to date.

composer create-project drupal-composer/drupal-project:8.x-dev my-project --stability dev --no-interaction

Step 2, add Search API Solr

We are using Search API Solr 2.x, compatible with Solr 7.x.

cd my-project
composer require 'drupal/search_api_solr:^2.1'

Step 3, configure Lando for Drupal 8

Initialize Lando with the Drupal 8 recipe and set the webroot as 'web' (default docroot used by the Composer template for Drupal projects).

lando init --recipe drupal8 --webroot web

Lando init

PHP 7.x is needed for Search API Solr 2.x, open the .lando.yml file and set the PHP version.

config:
  php: '7.2'
  webroot: web

Add then the Solr configuration for Search API.

services:
  search:
    type: solr:7.1
    core: drupal8
    config:
      conf: web/modules/contrib/search_api_solr/solr-conf/7.x

We specify here the desired Solr version and the core name.
The conf definition overrides the default Solr core configuration by the one provided with the Search API Solr module.

At this stage, you are good to go for the provisioning, so let's

lando start

Step 4, install Drupal and Search API

The new Umami profile that comes out of the box with Drupal 8.6 sounds like a way better starting point to test Search API, with real content, provided by the demo_umami_content module that is installed with the profile.

lando drush site-install demo_umami --account-name=admin --account-pass=admin --db-url='mysql://drupal8:drupal8@database/drupal8' --site-name=Drupal Solr

Then install Search API Solr.

lando drush en search_api_solr -y

Visit first your project at http://drupalsolr.lndo.site:8000, you should already have a nice Drupal Umami site out of the box!

Drupal Umami

Uninstall the core search module, that is not necessary anymore. Note that this will remove the Search block provided by the Umami demo. We will replace it later, with the Solr view exposed search block.

lando drush pmu search -y
Default Umami Search block

The project configuration is available anytime via

lando info

it will also return your Solr configuration needed in the last step.

Lando info Solr configuration

Step 5, configure Solr

Login (admin / admin) via http://drupalsolr.lndo.site:8000/user/login

We could start with the Solr Search Defaults module, but there is a configuration dependency with Comments for the Article content type that has been removed by the Umami profile, so it is a good opportunity to create our own configuration from scratch.
This is not a production or full Search API setup, just a minimal configuration to get our demo running and understand how it is build.

Head to Configuration > Search API

Add a server with the following values:

  • Server name: Solr Server
  • Backend: Solr
  • Solr Connector: Standard
  • Solr host: search
  • Solr core: drupal8

Leave all the other default values. The host and the core values were defined earlier in the .lando.yml file.

Search API Solr host and core configuration

Go back to the Search API configuration and add the index.

Search API add index

Set the following values:

  • Index name: Content index
  • Data sources: Content
  • Server: Solr Server

Let all the other values, save and do not index your content yet as there will be other configuration changes.

Click on the Fields tab then 'Add fields', and add the following ones:

  • General > Rendered HTML output, set the 'Search index' value for each View mode
  • Content > Title
Rendered HTML field configuration

Click on 'Save changes' and go back to the View tab, then click on 'Index now' (/admin/config/search/search-api/index/content_index).

Add now a view to display the content index (Structure > Views > Add view), with these values:

  • View name: Content index
  • View settings / Show: Index Content index
  • Pages settings: Check 'Create a page' and set the 'Path' to search/content
  • Pages settings: use the Display format 'Unformatted list' of 'Rendered entity'

Click then on 'Save and edit'.

On the Filter criteria section, add 'Fulltext search' then check 'Expose this filter to visitors'.

On the Advanced section, set the 'Exposed form in block' to 'yes' then save your view.

We will now replace the core search block that was removed previously.
Go to Structure > Block layout then click on 'Place block' for the Header and choose 'Exposed form: content_index-page_1'

Search block

Done, yay!

Go back to your site, you now have a functional Solr search with Umami.

Bonus: here is a Lando configuration example with a few more settings like phpMyAdmin and Mailhog, two other common services for a Drupal development environment. lando.yml

Lando resources