Multi Core Apache Solr using Search API
Apache Solr is a search platfrom from Apache Lucene Project. Drupal has integration with Apache Solr which is provided by Search API solr search which is dependent on Search API module. Solr Server is usually installed on some external server which is used to index search data. Since servers are capable enough to index data for multiple sites, the same server can be configured to index data for multiple sites, this particular configuration is called Multi-Core Solr Configuration.
On a linux server, the following packages have to be installed.(This blog is basically aimed for ubuntu, please find the corresponding command for your linux distributions.)
sudo apt-get install openjdk-7-jdk #Install Java
sudo apt-get install tomcat6 tomcat6-admin tomcat6-common tomcat6-user tomcat6-docs tomcat6-examples
sudo /etc/init.d/tomcat6 restart
Tomcat runs on port 8080, so tying http://example-server:8080/ would show a page saying "It works !".
Dowload Apache Solr and extract the file
wget http://apache.techartifact.com/mirror/lucene/solr/3.6.0/apache-solr-3.6.... tar -xvzf apache-solr-3.6.0.tgz
Look for tomcat
# The output should be tomcat6: /etc/tomcat6 /usr/share/tomcat6
mkdir webapps # This folder should be created by default when you install tomcat, in case it is not there create one.
Copy the solr
apache-solr-3.6.0.war into webapps folder. To the directory where apache solr was extracted.
sudo cp apache-solr-3.6.0/dist/apache-solr-3.6.0.war /usr/share/webapps/solr.war
Copy the example Apache SOLR application directory and all files within (in the unpacked folder) to a new solr folder in /usr/share/tomcat6:
sudo cp -R apache-solr-3.6.0/example/solr /usr/share/tomcat6/solr/
Create the Tomcat6-SOLR config file in /etc/tomcat6/Catalina/localhost/solr.xml
sudo vim /etc/tomcat6/Catalina/localhost/solr.xml
# Add following lines to the file
<Context docBase="/usr/share/tomcat6/webapps/solr.war" debug="0" privileged="true" allowLinking="true" crossContext="true">
<Environment name="solr/home" type="java.lang.String" value="/usr/share/tomcat6/solr" override="true" />
Edit the Tomcat6 tomcat-users.xml file to add users to manage tomcat6
sudo nano /etc/tomcat6/tomcat-users.xml
<user username="admin" password="my-password" roles="admin,manager"/>
Edit the file
sudo vim /etc/default/tomcat6
In the above opened file, make sure that below configuration is set to no.
This completes the Solr Installation. Next we would connect a Drupal Site to Solr.
Download the required modules
drush dl search_api search_api_solr search_api_page
Download the Solr PHP Client and copy it to sites/all/libraries.
Make the backups of the defaut files.
sudo mv schema.xml schema.orig.xml
sudo mv solrconfig.xml solrconfig.orig.xml
Now copy these files from the search api solr module. Goto sites/all/modules/search_api_solr/includes of your Drupal installation and copy the schema.xml and solrconfig.xml files to /usr/share/tomcat6/solr/conf
sudo cp schema.xml /usr/share/tomcat6/solr/conf/schema.xml
sudo cp solrconfig.xml/usr/share/tomcat6/solr/conf/solrconfig.xml
Now configure the server in multi core configuration.
Goto the directory where apache solr was extracted
sudo cp ~/apache-solr-3.6.0/example/multicore/solr.xml /usr/share/tomcat6/solr/solr.xml
Each site should have different configuration in /usr/share/tomcat6/solr
Suppose we have two sites: site1, site2
sudo mkdir /usr/share/tomcat6/solr/site1 # Configuration for Drupal Site 1.
sudo mkdir /usr/share/tomcat6/solr/site2 # Configuration for Drupal Site 2.
Then, copy the /usr/share/tomcat6/conf directory into each directory you create:
sudo cp -R /usr/share/tomcat6/solr/conf/ /usr/share/tomcat6/solr/site1/conf/
sudo cp -R /usr/share/tomcat6/solr/conf/ /usr/share/tomcat6/solr/site2/conf/
Edit the solr.xml file in /usr/share/tomcat6/solr to add your site
sudo nano /usr/share/tomcat6/solr/solr.xml
# The content of the file would be
<core name="site1" instanceDir="site1" />
<core name="site2" instanceDir="site2" />
where each line <core name/> is for different sites. You can add another sites by adding another <core name="sitex" instanceDir="sitex" /> to this file.
Now for the site1 Drupal Installation enable the module Search API Search API Solr and do it site2 too.
drush en search_api search_api_solr
In the Search API configuration(admin/config/search/search_api) and click add server and fill in the following details
- Server Name: Site 1 Solr Server.
- Solr host: localhost or the remote host.
- Solr port: 8080
- Solr path: solr/site1 # This is the one defined in solr.xml file.
And save it, you should get a messsage: The Solr server could be reached (latency: 2.6741027832031 ms).
Similarly do it for site2, the only difference would be the Solr path which should be set to: solr/site2.
So two sites have their search data being indexed at a central place, but the index data of one site will not corrupt the data of other as they are configured in different directories.