검색엔진인 루씬(Lucene)을

쉽게 사용할 수 있도록 만든 오픈 소스 Solr를 쉽게 익히기 위해,

Java에서 Solr를 쉽게 사용할 수 있도록 해주는 SolrJ를 이용하여

검색엔진을 데이터 베이스처럼 사용하여 웹용 게시판을 제작한다.

실제로는 이렇게 사용하지 않지만,

SolrJ의 사용법을 익히기 위해

Spring + SolrJ + Solr (Lucene) 기반으로 게시판을 구현하였다.

1. Solr로 만드는 단순 게시판: 각종 설치

2. SolrJ 사용법

3. Solr 단순 게시판 (CRUD)

4. Solr 페이징과 검색

구축 환경

- Solr 6.6.0

- SolrJ 6.6.0

- Eclipse Neon 2 + STS

- Tomcat 8.5, JDK 1.8


게시판을 제작하기 위해 필요한 설치를

다음과 같이 간단하게 정리하고, 상세한 자료는 찾아보길 바란다.

    1. Solr 설치
    2. Eclipse에 STS 설치 및 프로젝트 생성
    3. SolrJ 설치

이상의 설치가 되어 있거나 잘 아는 경우에는

solr에서 core(solrBoard)만 생성해서 실행하고,

gitHub의 코드를 다운 받아서 실행하면 된다.


먼저 Solr를 설치하기 위해 다음 주소에서 다운로드 받는다.

    http://lucene.apache.org/solr/

우측 상단의 [DOWNLOAD] 링크를 선택해서

각자의 운영체제에 맞추어 최신 버전을 다운로드 받는다.

여기서는 윈도우(10)를 기준으로 작성하기 때문에

solr-6.6.0.zip 파일을 다운받아서

그림과 각이 압축을 해제해서 사용하면 된다.

콘솔창(cmd)을 열어서

Solr의 압축 파일을 해제한 경로 하위에 있는 bin 폴더로 이동한 후에,

다음 명령어를 실행해서

Solr 서버를 실행하고 (start), solrBoard라는 코어(core)를 생성한다.

코어는 DBMS의 테이블(Table)과 비슷한 개념으로,

solrBoard 라는 데이터 저장 공간을 생성한 것이다.

> solr start  (Solr시작)

> solr create -c solrBoard  (코어생성)

> solr restart -p 8983 (Solr 재시작)


웹 브라우저에서 Solr 관리자 페이지에 접속하여,

그림과 같이 solrBoard가 생성되어 있으면

Solr 설치와 데이터를 저장할 코어 생성이 완료 된 것이다.

http://localhost:8983/solr

위 그림의 중앙 위쪽에 빨간색 박스안에 어떤 메시지가 있다면

오류가 발생한 것이니 수정하고 Solr를 재시작해야 한다.


solr에서 한글을 사용할 수 있도록 설정한다.

solr를 설치한 경로 하위에서 managed-schema 파일을 찾아서 수정한다.

코어를 solrBoard로 생성했기 때문에

solrBoard란 폴더가 다음과 같이 생기고 설정 폴더(conf)에서 찾을 수 있다.

solr-6.6.0\server\solr\solrBoard\conf


위 그림에서 _text_와 관련된 두 줄을 삭제하고

다음 코드를 적당한 위치(120 라인 앞)에 추가한다.


<dynamicField name="*_txt_ko" type="text_ko" indexed="true" stored="true"/>
<fieldType name="text_ko" class="solr.TextField">
    <analyzer type="index">
        <tokenizer class="org.apache.lucene.analysis.ko.KoreanTokenizerFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
        <filter class="solr.ClassicFilterFactory"/>
        <filter class="org.apache.lucene.analysis.ko.KoreanFilterFactory" hasOrigin="true" hasCNoun="true" bigrammable="false"/>
        <filter class="org.apache.lucene.analysis.ko.HanjaMappingFilterFactory"/>
        <filter class="org.apache.lucene.analysis.ko.PunctuationDelimitFilterFactory"/>
        <filter class="solr.StopFilterFactory" words="lang/stopwords_ko.txt" ignoreCase="true"/>        
        <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
    </analyzer>

    <analyzer type="query">
        <tokenizer class="org.apache.lucene.analysis.ko.KoreanTokenizerFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
        <filter class="solr.ClassicFilterFactory"/>
        <filter class="org.apache.lucene.analysis.ko.KoreanFilterFactory" hasOrigin="true" hasCNoun="true" bigrammable="true"/>
        <filter class="org.apache.lucene.analysis.ko.WordSegmentFilterFactory" hasOrijin="true"/>
        <filter class="org.apache.lucene.analysis.ko.HanjaMappingFilterFactory"/>
        <filter class="org.apache.lucene.analysis.ko.PunctuationDelimitFilterFactory"/>
        <filter class="solr.StopFilterFactory" words="lang/stopwords_ko.txt" ignoreCase="true"/>
        <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
        <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
    </analyzer>
</fieldType>


검색엔진을 제대로 구축하는 것이 아니기 때문에,

위 코드에서 지정된 불용어(stopwords_ko.txt)파일은

인터넷에서 다운로드받아서 지정된 폴더에 추가하거나

위 코드에서 해당 행을 제거하고 사용해도 된다.


다음으로 managed-schema 파일에서

다음과 같이 게시판의 필드를 추가한다.

  <field name="brdwriter" type="text_ko" multiValued="true" indexed="true" required="true" stored="true"/>
  <field name="brdtitle" type="text_ko" multiValued="true" indexed="true" required="true" stored="true"/>
  <field name="brdmemo" type="text_ko" multiValued="true" indexed="true" required="true" stored="true"/>
  <field name="brddate" type="string" multiValued="false" indexed="true" required="true" stored="true"/>


루씬 한글 형태소 분석기인 arirang analyzer (arirang.lucene-analyzer-x.x.jar, arirang-morph-1.0.x.jar)을

루씬 커뮤니티에서 다운받아서

Solr를 설치한 웹 폴더 (\solr-6.0.0\server\solr-webapp\webapp\WEB-INF\lib)에 복사한다.


이상의 설정이 적용되도록 Solr 서버를 재 가동한다.

solr restart -p 8983


이상의 설정들은 한글을 인텍싱하고 조회하는 설정을 처리한 것으로

이상의 내용들을 생략하고, Solr만 실행해도 테스트를 진행 할 수 있다.

게시판 예제는 쉽게 Solr를 실행하고 테스트 해 볼 수 있도록

한글 처리와 필드 정의 없이 사용하도록 제작되었다.


이상으로 Solr 설정을 간단하게 정리하였다.

자세한 설치와 설명은 검색을 하거나 여기를 참고하면 된다.


주의 1: 필드 정의에서 multiValued를 true로 지정했다. 필드 지정을 하지 않으면 기본값이 true 이기 때문이고, 따라서 게시판 예제에서 brdtitle[0]}, brdwriter[0]등과 같이 사용한다. false이면 brdtitle, brdwriter등으로 사용한다.

주의 2: 필드 정의에서 brddate를 문자열로 정의하였다. 필드 지정을 하지 않으면 tdates로 지정된다. 게시판 예제는 필드 지정없이 사용하는 것을 기본으로 하기 때문에 위와 같이 문자열로 지정한 경우 jsp 파일에서 formatDate를 사용한 것을 모두 다음과 같이 수정하여야 한다.

string으로 지정한 경우: <fmt:formatDate pattern = "yyyy-MM-dd" value = "${listview.brddate[0]}" />

tdates로 지정한 경우: <c:out value="${listview.brddate}"/>


다음으로 Eclipse에 STS (Spring Tool Suite)를 설치하고,

새로운 프로젝트(solrBoard)를 생성한다.


Eclipse의 Help > Eclipse Marketplace 메뉴에서 STS를 찾아서 설치한다.

File > New > Other 메뉴를 실행하고,

그림과 같이 Spring > Spring Legacy Project를 선택해서

새로운 Spring 프로젝트를 생성한다.


프로젝트 이름을 solrBoard로 입력하고,

템플릿을 Spring MVC Project로 지정해서 다음으로 넘어간다.

적당한 패키지 이름을 지정한다.

solrBoard로 프로젝트가 생성되었으면

Tomcat 서버에 등록해서 실행한다.

웹 브라우저에서

다음과 같이 입력하여 그림과 같이 실행되면

Spring 기반의 게시판을 제작할 준비가 된 것이다.

http://localhost:8080/solrBoard/

톰캣 실행시 많은 문제가 발생 할 수 있다.

Java 버전이 안 맞거나,

Tools.jar 파일이 없다거나,

Maven이 제대로 라이브러리를 설치하지 못하는 등의 문제가 발생할 수 있다.


실행은 되었지만 한글이 깨어지는 경우

solrBoard\src\main\webapp\WEB-INF\views 폴더에 있는

home.jsp의 첫 행에 다음 문장을 추가하면 된다.

<%@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%>


마지막으로 SolrJ를 설치한다.

다음 웹 사이트(Maven Repository)에 접속해서

설치할 SolrJ의 버전을 선택한다.

https://mvnrepository.com/artifact/org.apache.solr/solr-solrj

여기서는 현재 최신 버전인 6.6.0을 선택한다.


Maven 탭의 내용을 복사한다.



SolrJ를 사용할 프로젝트(solrBoard)의 pom.xml 파일을 열어서

적당한 위치에 붙여넣기하고 저장한다.

저장만 해도 SolrJ가 설치가 되지만

제대로 설치되지 않으면

solrBoard 프로젝트를 선택하고

컨택스트 메뉴에서 Run As > Maven Install로 설치하면 된다.







'서버 > 검색엔진' 카테고리의 다른 글

3. Solr 예제 분석 - 스키마(Schema)  (0) 2020.01.12
4. Solr 예제 분석 - DIH  (0) 2020.01.12
2. SolrJ 사용법  (0) 2017.08.24
3. Solr 단순 게시판 (CRUD)  (0) 2017.08.24
4. Solr 단순 게시판 - 페이징과 검색  (0) 2017.08.24

+ Recent posts