Apache Solr와 Liferay Portal의 연계
liferay 6.2 portal의 기본 검색 엔진은 Lucene이다. Lucene에서의 부족한 기능을 보완하기 위해 Solr를 사용한다고 할 때 세팅 방법에 대해 정리한다. (liferay 7의 기본 검색 엔진은 Elastic Search 라고 함)
17/1/31 Update
Lucene과 Solr를 비교한 걸 보니 비유를 Engine과 Car로 하고 있다. Lucene은 programmatic library라서 그 자체로 사용할 수 없지만
Solr는 그 자체로 사용할 수 있는 complete application이라고 한다.
Solr는 Lucene 위에서 개발되었고 다음과 같은 좋은 기능들이 있다.
- XML/HTTP and JSON APIs
- Hit highlighting
- Faceted Search and Filtering
- Geospatial Search
- Fast Incremental Updates and Index Replication
- Caching
- Replication
- Web administration interface etc
그리고 Solr index와 Lucene index는 같은 거라고 하는데 나는 왜 내가만든 데이터셋의 index가 읽히지 않는 것일까..
-> 두 인덱스는 같은 것이었다. Solr index를 만들 때 schmea.xml에는 companyId, groupId 등 필수적인 몇개의 필드들이 있었는데
이것들을 설정을 다르게 해서 (companyID, groupID로 해버림) 읽히지가 않았던 것이다.
Solr version은 4.10.4를 이용한다. 현재 Solr는 버전 6.4까지 나왔지만 버전 4를 이용하는 이유는 버전 5, 6은 Liferay marketplace에서 제공하는 Solr search engine 플러그인이 아직 없기 때문이다. 물론 구현하면 되긴하다.. 그리고 버전 6은 Java 8을 필요로 하기 때문에 고려 대상에서 제외했다.
설치 스펙
- Apache tomcat 7.0.75 (for Solr)
- Apache Solr 4.10.4
- Cent OS 6
- Liferay용 tomcat 7
Solr 버전 5부터는 Stand alone server를 제공하는데 버전 4 이하는 그렇지 않기 때문에 Tomcat을 설치하고 거기에 Solr를 올린다.
절차
Tomcat과 Solr를 올리는 절차는 이곳을 따라하면 된다.
(server.xml 수정 완료, Solr lib을 tomcat 디렉토리 밑으로 복사 완료, solr.war 파일 tomcat webapps 디렉토리에 배포 완료, 색인디렉토리 생성이 완료되어있어야 함)
그 다음 Liferay에서 사용할 수 있도록 하는 방법은 다음을 보면 된다. Configuring tomcat 파트까지는 위에서 다 완료했으니 그 아래부터 보면 된다.
정리하자면
- 'liferay' 라는 core를 만들었고,
- liferay marketplace에서 solr 4 web search engine 플러그인을 다운받아 Liferay portal에 설치한 상태이고,
- $LIFERAYHOME/tomcat-7..../webapps/solr4-web/WEB-INF/conf/solrconfig.xml 과 schema.xml을 solr가 설치된 tomcat의 solr/liferay/conf 디렉토리 하위에 복붙을 하였고,
- $LIFERAYHOME/tomcat-7..../webapps/solr4-web/WEB-INF/classes/META-INF/solr-spring.xml에서 url property를 다음과 같이 바꿨다는 것이다.
<property name="url" value="http://localhost:8983/solr/liferay" />
※ http://localhost:8983/solr/liferay 주소에서 liferay는 core의 이름을 말한다. (두번째 링크의 Configure Solr app에서 설정했음)
참조