Drupal 8: Apache Solr Search Setup

Abstract hero image

74% of all web traffic originates from search. Search and performance are KEY to a web site's success. The advanced search features and performance on popular services such as Youtube and Google have set the bar as far as user experience is concerned. Drupal 8 and Apache Solr (Search) gives a user experience of performance, fast advanced search features and related content capacity.

In this article I walk through my process of setting up Apache Solar on Drupal 8. This article in particular covers the; I found; rather cryptic process of configuring the server. Enjoy.

The article assumes that there is an instance of Apache Solr running on the server. If not it will first need to be installed on the server. Apace Solr Download

The modules needed

Use Composer to require the following modules:

  • Search Api (search_api)
    This module provides a framework for easily creating searches on any entity known to Drupal, using any kind of search engine. For site administrators, it is a great alternative to other search solutions, since it already incorporates facetting support and the ability to use the Views module for displaying search results, filters, etc. Also, with the Apache Solr integration, a high-performance search engine is available for this module.

  • Search API Solr (search_api_solr)
    This module provides a Solr backend for the Search API module.
    This article was based on Drupal 8 using Search API Solr 8.x-3x

Summary of steps

My configuration setup followed the following steps:

  • Install and set up Apache Solr server on Ubuntu.
  • Test that Apache Solr Server is running.
  • Uninstall the default Drupal Search module.
    drush pm:uninstall search
  • Use Composer to install the modules mentioned above
    composer require drupal/MODULE
  • Use:
    drush en -y
    to enable the following modules:
    • Search API
    • Search API Solr
    • Search API Solr Admin (sub-module of Search API Solr)
    • Search API Solr Search Defaults (sub-module of Search AP Solr)
      Enable this module for a best-practice default setup of Search API with the Solr backend. After installation it is recommended to uninstall this module again for performance reasons. The provided configuration will not be removed.
  • Configure Solr Server to work with Drupal 8

Test that the Solr Server is running.

From the command line run:

sudo systemctl status solr.service

If the Solr Server is running you should seethe following line in your output:


    Active: active (exited) since Mon 2020-02-24 15:39:54 UTC; 31min ago

Apache Solr terminology

Understanding terminology in a name space often helps to understand processes.Let us look at a few terms:

  • Distributed search: a search engine technique that uses many computers and networks to handle search related tasks.
  • Non-distributed search: antithesis of distributed search and implies a single Solr Server Instance.
  • Collection:
    • In distributed search a collection is a logical index spread across multiple servers.
    • In non-distributed, a single server can have multiple collections and each collection is also a core.
  • Core: Is that part of the server which runs one collection (distributed search). In non-distributed core and collection are the same.

Configure Solr Server to work with Drupal 8

Because we installed Search API Solr Search Defaults, this will set up a best-practice default setup of Search API with the Solr backend. In part it will create your first Solr core/collection named collection1.

Search configuration is found at:

/admin/config/search/search-api

You should see something like the image below.

Image
search api configuration screen

Check the configuration of your Solr Server by clicking the 'Edit' button under 'Operations'. Now, even though Status indicates all is ok, you may, and if this is the first time you are using Solr on your D8 site, you probably will see errors like:

Image
solr error get config files

Or with in the status report:

Image
schema not up to date

What you need to do is copy the D8 Search API Solr configuration files to the collection1 directory environment within the installation files of the Solr Server running on your web server.

Click the 'Get config.zip' button to download a .zip file of the required configuration files. I then upload and unpack the archive to my Drupal configuration folder. This will be deleted once Solr is up and running.

Image
get config.zip

 

Configure Solr Server - part 2

To continue, you need to know where your collection is located on your server. To do this go to the Solr Admin screen located at:

http://yourserver:8983/solr/

Click 'Core Admin' and find the instanceDir value. On Ubuntu this is:

/var/solr/data/collection1
Image
solr server admin

SSH in to your server and become the root user: sudo su

Locate yourself in your collection1 directory: cd /var/solr/data/collection1 and you should see something like:


    drwxrwxr-x 6 solr solr 4096 Feb 25 11:16 .
    drwxr-x--- 3 solr solr 4096 Sep 4 07:32 ..
    drwxrwxr-x 2 solr solr 4096 Feb 24 15:38 conf
    -rw-rw-r-- 1 solr solr 81 Feb 25 07:06 core.properties
    drwxrwxr-x 6 solr solr 4096 Sep 7 10:08 data

Rename conf to conf.old mv conf conf.old.

Copy the configuration that was just uploaded

cp -R /pathtoserver/yourwebsite.com/config/conf/ /var/solr/data/collection1/

 

Change owner of the copied conf chown solr:solr -R conf

Change permission of copied conf chmod 755 -R conf

Modify the solr.install.dir value of the copied conf/solrcore.properties file from solr.install.dir=../../.. to solr.install.dir=/opt/solr

Restart the Solr server systemctl restart solr.service

Reload the Solr Server configuration page of your Drupal site and you should now see configuration settings for a Solr server that is running correctly.

Image
solr server ok

NOTE: The Solr admin page located on :8983/solr is open to the public and must be protected for production environments.

This follow up article covers setting up a search using the Solr server as well as setting up search facets.

References

Add new comment

Restricted HTML

  • Allowed HTML tags: <a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • Lines and paragraphs break automatically.
  • Web page addresses and email addresses turn into links automatically.