Liferay 6.1 integration with Solr Search Engine in Clustered
environment
Solr is the popular, blazing fast open source enterprise
search platform from the Apache Lucene project. Its major features include
powerful full-text search, hit highlighting, faceted search, dynamic
clustering, database integration, and rich document (e.g., Word, PDF) handling.
Solr is highly scalable, providing distributed search and index replication,
and it powers the search and navigation features of many of the world's largest
internet sites. Refer to Apache Solr.
We have made enhancement to the search infrastructure of the
portal recently. We abstracted out Lucene as a search engine, now people can
build plugins that integrate with others search engines frameworks.
Currently the only plugin developed is one of the Solr, the
Lucene plugin is the default implementation and comes bundled with the portal.
Roughly speaking, Solr is an application that listens for
indexing and searching commands via HTTP requests. You can deploy Liferay in
one server and have Solr running in a different server, this is very helpful
for clustered portals because we got rid of racing issues when Lucene JDBC was
used. Also, you can have a cluster of Solr instances that does load balancing
of requests.
Use Case: Integrate Solr Search with Liferay
6.1 in a clustered environment
Pre-requisite:
·
Download solr-web-6.1.0.1-ce-ga1-20120106155615760.war
(Solr-Plugin) for Liferay 6.1 CE version
·
Download Apache Tomcat 7.0.x stable version.
Configuration
Steps:
Step 1: Extract the
downloaded Solr 1.4.1 Zip file. I will call that extracted folder as SOLR_HOME.
For e.g. consider SOLR_HOME as D:\Apache_solr\apache-solr-1.4.1
Step 2: Copy apache-solr-1.4.1.war
from SOLR_HOME\dist\ to SOLR_HOME\example\solr
Step 3: Open
SOLR_HOME\example\solr\conf\solrconfig.xml file and
Replace
<dataDir>${solr.data.dir:./solr/data}</dataDir>
With
<dataDir>${solr.data.dir:<<SOLR_HOME>>/example/solr/data}</dataDir>
[Note : Instead of <<SOLR_HOME>> write down the
actual path]
Step 4: It is
recommended to run the solr instance on separate tomcat instance other than
Liferay tomcat instance.
For that extract the downloaded Apache Tomcat 7.0.x. I will
call that extracted folder as SOLR_TOMCAT. For e.g. Consider SOLR_TOMCAT as
D:\Apache_Tomcat\apache-tomcat-7.0.16
Step 5: Open
SOLR_TOMCAT/conf/server.xml and make necessary changes
·
Change server port to 9005
<Server
port="9005" shutdown="SHUTDOWN">
·
Change Connector port to 9090 and redirectPort to 9443
<Connector
port="9090" protocol="HTTP/1.1"
connectionTimeout="20000" redirectPort="9443" />
·
Change AJP Connector port to 9009
<Connector
port="9009" protocol="AJP/1.3" redirectPort="9443"
/>
Step 6: Set the
following line to setenv.bat
export
JAVA_OPTS="$JAVA_OPTS
-Dsolr.data.dir=<<SOLR_HOME>> /example/solr/data"
[Note: Instead of <<SOLR_HOME>> use actual path]
Step 7: Create a
solr.xml under SOLR_TOMCAT\conf\Catalina\localhost\ with the following content
<?xml version="1.0"
encoding="utf-8"?>
<Context docBase="<<SOLR_HOME>>/example/solr/apache-solr-1.4.1.war"
debug="0" crossContext="true">
<Environment
name="solr/home" type="java.lang.String" value="<<SOLR_HOME>>/example/solr"
override="true"/>
</Context>
[Note: Instead of <<SOLR_HOME>> use actual path]
Step 8: Now start tomcat server and check whether it’s
running without error. If started
successfully then go to browser and check http://localhost:9090/solr. (You will
find SOLR Home page here)
Step 9: Integrate
SOLR Plugin with Liferay server.
[Note: For this step, we have an assumption that Liferay 6.1
Clustering is already setup using Apache Server in your machine and its running
successfully as per this instructions].
·
Deploy the downloaded solr-web-6.1.0.1-ce-ga1-20120106155615760.war
on both Liferay instances
·
Once its deployed, stop the Liferay server and
SOLR_TOMCAT
·
Copy Schema.xml from Liferay_HOME1 or Liferay_HOME2\tomcat\webapps\solr- web\WEB-INF\conf\
to SOLR_HOME\example\solr\conf\
·
Open Liferay_HOME1\tomcat\webapps\solr-web\WEB-INF\classes\META-INF\solr- spring.xml
and Liferay_HOME2\tomcat\webapps\solr-web\WEB-INF\classes\META- INF\solr-spring.xml
modify
<bean id="com.liferay.portal.search.solr.server.BasicAuthSolrServer"
class="com.liferay.portal.search.solr.server.BasicAuthSolrServer">
<constructor-arg
type="java.lang.String" value="http://localhost:8080/solr" />
</bean>
With this
<bean
id="com.liferay.portal.search.solr.server.BasicAuthSolrServer"
class="com.liferay.portal.search.solr.server.BasicAuthSolrServer">
<constructor-arg type="java.lang.String"
value="http://localhost:9090/solr"
/>
</bean>
It’s done. Start
SOLR_TOMCAT and Liferay server and test with OOTB Search portlet.
When you search anything on Liferay server, you will
find that logs are updated on SOLR_TOMCAT console.
Test Case: To test this scenario, go to http://localhost:8082 and add any blog or web
content on guest community. Now to go http://localhost:8081
and search that created content in OOTB Search portlet, if you will get result,
it means its integrated successfully.
No comments:
Post a Comment
Note: Only a member of this blog may post a comment.