Solr의 사용법을 익히기 위해

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

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

2. SolrJ 사용법

3. Solr 단순 게시판 (CRUD)

4. Solr 페이징과 검색


Solr등 각종 설치와 관련된 상세한 내용은 이전 글을 참고하고,

여기서는 간단하게 Solr를 다운로드 받은 후

다음과 같이 실행하여 Solr 서버의 설정을 간단하게 마친다.

그리고, github에서 게시판 소스를 받아서 예제를 실행하면 된다.

> solr start
> solr crate -c sqlBoard
> solr restart -p 8983


게시판과 관련된 설명은

기존에 Spring 4 + MyBatis 3 + MariaDB로 개발했던 게시판의 내용을 읽어 보길 바라고

여기서는 게시판에 대한 설명보다는 SolrJ의 사용법을 중심으로 정리한다.


SolrJ는 Java에서 Solr 서버를 제어할 수 있도로 다양한 기능을 제공하는 클래스로,

사용법은 아주 간단하고, Solr 문서 사이트에 쉽게(?) 설명되어 있다.

이 내용을 토대로 SolrJ의 몇 가지 기능을 정리하였다.


먼저, Java에서 SolrJ를 이용하여 Solr 서버에 접속하는 코드이다.

String urlString = "http://localhost:8983/solr/solrBoard";

SolrClient solr = new HttpSolrClient.Builder(urlString).build();

HttpSolrClient 클래스를 이용하여 접속할 Solr 서버의 주소를 지정한다.

다만, 하나의 Solr 서버에는 많은 코어(core)가 있을 수 있기 때문에

사용하고자 하는 코어(solrBoard)를 지정해야 한다.


다음으로, Solr 서버에서 데이터를 조회하는(Query) 코드이다.

        SolrQuery query = new SolrQuery();
        query.setQuery("*:*");
        query.setRows(Integer.MAX_VALUE);
        query.addSort("id", ORDER.desc);

        QueryResponse rsp = solr.query(query);
        SolrDocumentList docs=rsp.getResults(); 
        for(int i=0;i<docs.getNumFound();i++){
            System.out.println(docs.get(i));
        }

SolrQuery클래스를 이용하여

조회(Query)할 데이터의 조건을 설정하고 solr.query로 실행한다.

solr 변수는 Solr 서버에 접속하면서 생성한 변수이다.


조회할 데이터의 조건은

루씬(Lucene) 문법으로 여기서는 자세하게 정리하지 않는다.


코드에 사용된 조건은

모든 데이터(*.*)를 

페이징 처리 없이 모두 가지고 와서(Integer.MAX_VALUE) 출력한다.

데이터 정렬(sort)은 id 필드의 값이 큰 순서(Descending)로 하였다.


조건에 맞추어 반환된 데이터(SolrDocumentList)는 Json 형식의 배열로 반환되고

getNumFound() 함수로 총 데이터의 개수를 알 수 있다.


데이터를 추가(수정)하는 방법은

다음 코드와 같이 SolrInputDocument를 이용한다.

        SolrInputDocument solrDoc = new SolrInputDocument();
        solrDoc.addField("id", 1);
        solrDoc.addField("title", "단순게시판");
        
        solr.add(solrDoc);
        solr.commit();

SolrInputDocument로 생성한 solrDoc변수에

필드명과 저장할 값을 지정해서 addField() 함수로 추가하면 된다.

필드명이 Solr 서버(실제로는 코어, managed-schema)에 있을 경우

지정된 데이터 형태로 저장되고,

필드명이 없을 경우 Solr 서버가 판단하여 적정한 데이터 형태로

지정해서 필드를 생성한 뒤 저장한다.


Solr에서 core를 생성할 때,

기본 설정으로 id 필드를 키 필드(Primary key, Unique Field)로 한다.

따라서, 하나의 글을 저장할 때,

이 키 필드(id)의 값이 있으면 수정, 없으면 신규로 저장한다.

즉, DBMS의 merge 문과 같은 방식으로 사용한다.


마지막으로 삭제는 다음과 같이

삭제할 필드명과 조건 값을 지정하면 된다.

        solr.deleteByQuery("id:1");
        solr.commit();


데이터를 추가하거나 삭제한 경우

항상 commit()을 호출하여 데이터 변경이 반영되도록 한다.




Solr의 사용법을 익히기 위해

Spring + SolrJ + Solr (Lucene) 기반으로 단순 게시판을 구현하였고,

소스는 Github에서 받을 수 있다.

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

2. SolrJ 사용법

3. Solr 단순 게시판 (CRUD)

4. Solr 페이징과 검색


게시판을 만들기 위해서는

MariaDB 와 같은 DBMS에서 데이터를 저장하는

다음과 같이 테이블(TBL_BOARD)을 생성해야 한다.

CREATE TABLE TBL_BOARD (

    BRDNO int(11) NOT NULL AUTO_INCREMENT,         -- 글 번호

    BRDTITLE varchar(255),                                -- 제목

    BRDWRITER varchar(20),                              -- 작성자

    BRDMEMO   varchar(4000),                           -- 내용

    BRDDATE     datetime,                                -- 작성일자

    PRIMARY KEY (BRDNO)
) ;

기본적인 게시판을 구현하기 위해서는 이상의 5 개의 필드가 필요하고,

Solr에서 정의하는 방법은 설정 부분에서 정리하였다.

여기에서는 이러한 설정을 하지 않고 코어(solrBoard)만 생성해서 진행한다.

데이터를 저장할 때 Solr에서 자동으로 생성되는 기능을 이용하였다.

입력 값에 따라서 다음과 같이 자동으로 생성된다.

  <field name="brdtitle" type="strings"/>
  <field name="brdwriter" type="strings"/>
  <field name="brdmemo" type="strings"/>
  <field name="brddate" type="tdates"/>

대부분 위에서 정의한 필드 구조로 생성되지만

글 번호(BRDNO)는 키 필드(PRIMARY KEY)로

데이터 값을 유일하게(Unique) 유지하는 역할을 하는데 Solr에서 별도로 설정을 해야 한다.

여기에서는 설정을 생략하기 위해 코어 생성시 기본 지정되는 ID 필드를 이용한다.

HTML이나 VO 클래스에서는 BRDNO로 사용하고

SolrJ를 이용하여 저장하거나 조회 때에는 ID라는 이름으로 사용한다.



게시판의 기능 중 글 리스트를 먼저 구현한다.

Java에서 board1List 컨트롤을 다음과 같이 작성한다.

Board1Ctr.java

이상의 코드는 모두 SolrJ 사용법 중 데이터 조회 부분에 정리되어 있다.

여기에서는 기본 예제로

Solr 서버에 있는 모든 데이터를 가지고 와서 출력하도록 했기 때문에

설명에 사용된 코드를 그대로 사용하였다.

차이는 ModelMap을 이용하여

Solr 서버에서 가지고온 데이터(docs)를

listview라는 이름으로 Jsp로 넘겨 주는 것이다 [라인 10].


/board1/boardForm.jsp

대부분의 코드는 디자인을 위한 HTML 코드이고

주어진 데이터를 화면에 출력하는 코드는 18 라인부터 29라인이다.

주어진 데이터(listview)의 개수 만큼  반복(forEach)해서

각 행(tr)을 생성하여 출력한다.


listview는 ModelMap으로 컨트롤(Java)에서 주어진 데이터 이고

Jsp(HTML)에서는 [listview.변수]로 사용하면 된다 [라인 24~27].


다만 키인 id를 제외하고

나머지 필드는 모두 배열[]로 처리되어 있다.

필드 정의에서 multiValued가 true로 지정되었기 때문으로 [설치 참조]

별도로 지정하지 않으면 true가 기본값으로 사용된다.


작성일자(brddate)에 형식(formatDate) 태그를 사용한 것은 [라인 27]

Solr 서버가 주어진 데이터(yyy-mm-dd)를 날짜로 인식해서

tdates 형으로 지정해서 저장하기 때문이다.

tdates 형으로 지정하면 [Sat Aug 19 09:00:00 KST 2017]로 출력한다.

작성일자(brddate)를 managed-schema에서 string으로 지정하는 것이 좋지만

여기서는 형식(formatDate) 태그를 이용하여 처리하였다.


주의: 게시판 예제는 필드 정의를 하지 않았다는(solr만 시작) 전제로 작성되었다.

만약, 설치에서 정리한 데로 필드를 정의하였다면,

brddate를 날짜형(tdates )이 아닌 문자열(String)로 지정되어 있기 때문에

27 라인에서 오류가 발생한다.

27 라인을 다음과 같이 수정하여야 한다.

<td><c:out value="${listview.brddate}"/></td>

필드 정의 부분의 주의 사항을 읽어보길 바란다.


톰캣을 실행하고

웹 브라우저에서 다음과 같이 입력해서 실행을 확인한다.

http://localhost:8080/solrBoard/board1List


이번에는 글 쓰기 기능을 구현한다.

게시판 글 쓰기는 글을 작성하기 위한 폼(board1Form)과

작성된 내용을 저장하는 부분(board1Save)으로 구성된다.


Board1Ctr.java

여기에서는 글쓰기와 글 수정을 하나로 구성했기 때문에

조금 복잡하게 보이지만 단순한 개념이다.

글 쓰기 폼은 아무 것도 하지 않고 입력 받을 HTML을 화면에 출력한다.

글 수정 폼은 지정된 글 번호(brdno)에 해당하는 내용을 찾아서 (getOneboard) [라인 5]

입력 상자에 초기값으로 넣어준다.


Solr에서 데이터를 가지고 오는 것은

글 읽기와 동일하기 때문에 getOneboard() 함수로 작성하였다.

상세한 내용은 글 읽기에서 정리하였으니 넘어간다.

/board1/boardForm.jsp

글 내용을 작성한 뒤에

글 저장(board1Save)을 호출하기 위해

Form 태그에서 action으로 지정하였다 [라인 1].


컨트롤의 getOneboard()함수에서

지정된 글에 대한 정보를 boardInfo에 넣어서 반환했기 때문에

Jsp에서도 [boardInfo.변수]로 사용한다 [라인 11, 15, 19, 24, 25].


두 개의 HTML HIDDEN 태그가 사용하였다 [라인 21, 22].

글 번호(brdno)는 글쓰기 일때는 값이 없고

글 수정일때는 값이 있게 되어,

저장시(board1Save ) 신규 등록과 수정의 기준이 된다.


작성일자(brddate)를 HIDDEN 태그로 가지고 있는 것은 Solr의 특성때문이다.

글 내용을 저장할 때 지정된 필드만 수정하는 것이 아니고

행 자체를 수정하기 때문에

수정되지 않았어도 같이 필드 값을 주지 않으면

빠진 필드는 빈 값으로 채워진다.

따라서 입력 받지 않는 작성일자도 값을 가지고 있다가 [라인 22]

같이 board1Save 컨트롤로 넘겨 준다.

작성일자는 Solr에서 [Sat Aug 19 09:00:00 KST 2017]으로 반환되기 때문에

yyyy-mm-dd로 변환해서 가지고 있는다 [라인 22].


웹 브라우저에서 다음 주소를 입력하여 실행을 확인 할 수 있다.

http://localhost:8080/solrBoard/board1Form



[저장]을 선택하면 오류가 날 뿐 저장되지 않는다.

Solr 서버에 데이터를 저장하는 컨트롤(board1Save)을 작성해야 한다.

다음 코드 중 핵심 코드는 SolrJ 사용법에서 정리하였다.

Board1Ctr.java

Solr 서버에 데이터를 저장하기 위해

SolrJ로 SolrInputDocument 클래스를 사용하여 저장한다 [라인 9~18].


사용자가 입력한 값을 boardInfo로 받아서 [라인 2]

SolrInputDocument 에 넣어준다[라인 9~14].

다만, 키 필드를 id로 지정했기 때문에 글 번호(brdno)를 id로 지정하였다 [라인 10].


이상의 코드는 SolrJ 사용법에서 정리한 내용과 동일하고

차이나는 부분은 글 번호(brdno)와 작성일자(brddate)의 값을 생성하는 부분이다.

이 두 필드는 사용자가 입력하는 값이 아니고

프로그램에서 생성하는 값이기 때문이다.


먼저, 작성일자는 SimpleDateFormat 클래스를 사용하여

현재 서버의 시간을 yyyy-MM-dd형식으로 저장하도록 했다.


글번호는 조금의 트릭을 사용하였다.

글번호는 데이터 저장 공간(테이블) 내에서 유일한 값(Primary key, Unique)을 가져야 한다.

DBMS에서는 최대 글번호에 1씩 증가하여 유일한 값을 유지한다.

Solr에는 이러한 기능이 없기(?) 때문에 날짜를 이용하여 생성하였다 [라인 30].

서버의 시간을 밀리센컨드로 받아서 [라인 31]

1~10까지의 숫자 중 아무 숫자랑(random) 결합하여 유일한 값을 생성하였다 [라인 32].

서버 성능에 따라 중복 값이 발생할 수 있지만 테스트 용으로는 무난하게 사용할 수 있다.


다음으로 글 읽기(baord1Read) 기능을 구현한다.

Board1Ctr.java

글읽기는 글 수정과 같이

주어진 글 번호에 대한 상세 정보를 조회하여 화면에 출력한다.

따라서 getOneboard() 함수를 작성하고

이 함수를 각각의 컨트롤에서 호출하여 구현하였다.


주어진 글 번호에 대한 상세 정보를 조회하는 코드는

데이터를 찾는 것이기 때문에 글 리스트와 동일하다

차이점은 주어진 글 번호를 조건으로 한다는 점이다.

(실제로는 글 리스트는 글 본문을 조회하지 않고, 글읽기는 조회한다는 차이도 있다)


글 번호를 조건(Query)으로 하기 위해

setQuery 함수의 파라미터에 조건("id:" + brdno)을 지정하였다 [라인 11].

글 리스트에서는 조건을 전체 데이터("*:*")로 지정하였다.


조회 결과 반환된 데이터(docs)가 [라인 15]

1개 이상을 반환할 수 있기 때문에 배열로 반환된다.

글 읽기는 하나의 데이터(행)만 있으면 되기 때문에,

Jsp로 해당 글 정보를 넘기기 전에 docs의 get() 함수를 이용하여

첫(0) 번째 데이터를 boardInfo라는 이름으로 지정하였다 [라인 19].


/board1/boardForm.jsp

글 읽기 화면(jsp)에서는 컨트롤에서 주어진 값들을(boardInfo) 출력한다.

글 쓰기 폼과 유사하게 작성하고,

디자인 구성이나 입력받기 위한 태그(text, textarea)를 사용하는 차이가 있다.



마지막으로 글 삭제(baord1Delete) 기능을 구현한다.


Board1Ctr.java

글 삭제는 코드와 같이 매우 간단하다.

deleteByQuery() 함수를 이용하여

삭제할 때 조건으로 사용할 필드와 값을 지정하면 된다.


글 읽기에서 삭제 버튼을 눌러서 잘 실행되는지 확인한다.


이것으로 Solr를 이용한 단순 게시판을 구현하였다.

웹 브라우저에서 다음 주소를 입력하여 실행을 확인 할 수 있다.

http://localhost:8080/solrBoard/board1List




이상의 내용을 Solr의 입장에서 정리하면

게시판 글 쓰기(수정)와 삭제는 색인 작업(Indexing)이 되고,

글 리스트와 글 읽기는 검색 작업(Query)이 된다.

즉, 검색 엔진의 가장 중요한 기능은 색인과 검색으로

여기에서는 SolrJ로 Solr의 색인과 검색을 제어하는 간단한 방법들을 정리하였다.




SolrJ의 사용법을 익히기 위해

Spring + SolrJ + Solr (Lucene) 기반으로 단순 게시판을 구현하였고,

소스는 Github에서 받을 수 있다.

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

2. SolrJ 사용법

3. Solr 단순 게시판 (CRUD)

4. Solr 페이징과 검색


이전 예제는 Solr 서버에 대한 데이터 입출력(CRUD)을 익히기 위한 예제로

간단한 단순 게시판을 구현하였고,

여기에서는 검색 엔진인 Solr 서버의 기능을 조금 더 익히기 위해

페이징과 검색 기능을 구현한다.


페이징과 검색은 게시판 예제 중 제법 고급 기능으로

게시판에 대한 조금은 깊은 이해가 필요하다.

다만 이 글은 Solr에 대한 사용법을 익히는 것이 목적이기 때문에

게시판과 관련된 설명은 간단하게 정리하니

Java로 구현된 게시판의 정리 내용을 읽어보면 도움이 될 것이다.


먼저 페이징(Paging) 기능을 구현한다.

페이징은 다음 그림의 하단에서 보듯이 주어진 데이터를 나누어서 출력하는 것을 의미한다.

많은 데이터를 하나의 웹 페이지 출력하면 시간과 메모리 등의 문제가 발생히 때문에,

지정된 개수(10, 20개 등) 만큼 조회해서 출력한다.

페이징 처리에 대한 구체적인 구현 방법은 제법 복잡해서 여기에서는 정리하지 않고,

두 가지 기본 개념만 간단하게 정리하면

주어진 데이터의 개수를 출력할 데이터 개수(10, 20개 등)로 나누어

전체 페이지 수를 계산해서 화면에 출력한다.

예로, 데이터가 100 개면 10 개의 페이지가 출력된다.


현재 페이지가 지정되면 (리스트에서 사용자가 클릭하면)

계산을 해서 조회할 데이터의 시작 번호를 찾게 되고

이 번호 이후의 데이터를 지정한 개수만큼 가져와 출력한다.


이외에 상세한 정보는 Java(Spring) 게시판 예제의 정리를 참고하면 된다.


Board2Ctr.java

기존에 사용한 코드 (board1List)에 몇 가지를 추가하여 구현하였다.

추가한 코드는 데이터의 개수를 세어 [라인 9~12]

페이지를 계산하고 [라인 13],

시작 데이터와 조회할 데이터 개수를 지정하는 코드이다 [라인 16, 17].


개수를 세는 조회(Query)에는 데이터 반환이 필요 없기 때문에

반환 할 데이터 개수를 0 으로 지정한다 (setRows(0)) [라인 9].

총 데이터의 개수(getNumFound)만 확인하여 [라인 12],

PageVO의 pageCalculate() 함수에 파라미터로 제공하여 계산한다 [라인 13].

pageCalculate() 함수와 페이징에 대한 상세한 설명은

Java(Spring) 게시판 예제의 정리를 참고 하면 된다.


이 함수를 실행하고 나면

PageVO 클래스의 rowStart에 시작번호가 지정되어 있기 때문에

getRowStart() 함수로 가져와서 -1 하였다 [라인 16].

이 클래스는 자바 게시판 예제에서 작성한 것으로

애초 개발이 Oracle 기반으로 제작되었고,

Oracle에서는 데이터 시작 번호를 1 부터 한다.

Solr 에서는 0 부터 시작하기 때문에 PageVO를 수정하지 않고 -1로 구현하였다.


setRows() 함수로 가져올 데이터 개수를 지정하였다 [라인 17].


이렇게 실행된 데이터(docs)와 페이지 정보(pageVO)를

Jsp로 넘겨서 화면에 출력한다 [라인 21, 22].

/board2/boardList.jsp


화면 출력은 페이지 번호를 출력하는 forEach 문만 이해하면 된다 [라인 3].

forEach문은 앞서 글 리스트의 화면(boardList.jsp)에서 사용하는 것처럼

지정된 데이터(배열)의 개수만큼 반복처리하는 것이 있고,

여기에서 사용한 것처럼 시작 값(pageStart)부터 종료 값(pageEnd)까지 반복하는 기능이 있다.


데이터가 10,000개이고 10개씩 출력할 경우,

페이지가 1,000개가 되기 때문에 모두 출력할 수 없어

페이지 번호(시작페이지와 종료페이지)에 대하여 페이징을 하게 된다.

PageVO 클래스에 있는 pageCalculate()함수에서

시작페이지(pageStart)부터 종료페이지(pageEnd)를 계산해 준다.

이 값을 하나씩 i 변수에 넣어서 페이지 번호를 출력한다 [라인 3].


부가적으로 새로운 글 번호를 출력하도록 했다.

앞서의 리스트 그림을 보면

날짜와 시간으로 된 긴 글 번호(brdno) 값 대신에

11 부터 2 까지의 새로운 번호가 출력된 것을 볼 수 있다.

내부적으로는 날짜와 시간으로 된 글 번호(brdno) 값으로 처리하지만

사용자에게 보여주는 값은 정리된 일련번호를 보여주는 것이다.

다음 코드를 사용해 보고 계산식은 각자 확인해 보길 바란다.

<c:forEach var="listview" items="${listview}" varStatus="status">   
    <tr>
        <td><c:out value="${pageVO.totRow-((pageVO.page-1)*pageVO.displayRowCount + status.index)}"/></td>
        <td><a href="${link}"><c:out value="${listview.brdtitle[0]}"/></a></td>
        <td><c:out value="${listview.brdwriter[0]}"/></td>
        <td><fmt:formatDate pattern = "yyyy-MM-dd" value = "${listview.brddate[0]}" /></td>
    </tr>
</c:forEach>

/board2/boardList.jsp


이번에는 실제 검색에서 사용되는 기능과 유사한 게시판의 검색 기능을 구현한다.

실제 검색은 더 많은 필드들을 복잡한 조건으로 구현하고,

여기서는 다음 그림의 아랫 부분에 있는 것처럼

게시판의 제목과 내용 필드에 대하여

검색하려고 하는 값(검색 키워드)을 이용하여 조회(Query)하는 기능을 구현한다.

구현 방법은 글 읽기에서 작성했던 것처럼

Solr의 setQuery() 함수에 조건을 지정하여 구현한다.

글 읽기에서는 검색할 필드와 값을 “:”으로 구분하여 지정하였다.

예: 글번호:1      =>     id:1


여기에서는 사용자가 선택한 필드와 값(검색키워드)를 이용하여

다음과 같은 문장을 생성하여 조건으로 사용하면 된다.

제목:검색키워드 AND 내용:검색키워드

=>   brdtitle:HTML AND brdmemo:HTML


/board3/boardList.jsp

이해를 위해 화면 처리 부분을 먼저 정리한다.

검색 결과에 대해서도 페이징 처리를 구현해야 하기 때문에

검색 필드(checkbox)와 키워드(text), 현재 페이지 번호(hidden)를 가지고 다녀야 한다.

이 각각의 값을 Get방식으로 전달하기 보다는

Post 방식이 더 쉽기 때문에 Form 태그를 사용하였고, [라인 1].

코드를 줄여서 보이기 위해, 앞서 구현한 페이징을 별도의 파일로 처리하였다 [라인 2].


HTML에서 두 개의 체크 박스를 같은 이름(searchType)으로 지정하면

Java에서 콤마(,)로 받게 된다.

첫 번째 체크 박스는 brdtitle [라인 5],

두 번째 체크 박스는 brdmemo [라인 7]

로 값(Value 속성)을 지정하고,

사용자가 둘다 선택하면 [brdtitle, brdmemo]로 Java에 전달된다.

이 값을 searchType 변수로 받아서

다시 화면에 출력할 때 선택된 상태로 보일 때 사용한다.

즉, searchType 변수 값에 brdtitle 문자열이 있으면(indexOf>-1)

해당 체크 박스가 체크 표시(checked)가 되도록 한다 [라인 5].

글 내용(brdmemo)도 동일하게 구현한다 [라인 7].


화면 처리와 관련하여 보다 상세한 설명은 Java 게시판 예제의 정리를 참고하면 된다.


Board3Ctr.java

컨트롤에서는 Solr 서버에서 원하는 데이터를 가지고 올 수 있도록 검색 조건을 생성한다.

4 라인부터15 라인까지의 내용이 조건을 위해 추가한 코드이다.


사용자가 체크박스에서 선택한 내용을 searchType으로 받아서 [라인 4]

콤마(,)로 분류하여 각 선택 값을 배열로 변환한다 [라인 7].

이 배열의 개수만큼 반복해서 [라인 8]

필드명과 검색 키워드(searchKeyword)를 콜론(:)으로 구분하여 조건을 생성한다.

조건과 조건은 AND로 묶었다 [라인 9]

(OR로 처리해도 된다. 개념상 OR가 더 적당하다)


이렇게 생성한 조건(queryStr)을

글읽기에서 사용한 것처럼 setQuery로 지정하면 된다 [라인 17].


주의 : 코어만 생성하고 Solr를 실행한 경우 한국어 검색은 제대로 실행 되지 않을 수 있다.

형태소 분석기 등을 추가하고, 필드 설정을 제대로 해야 한다.

자세한 내용은 설정 부분을 참고하면 된다.


이상으로 Solr와 SolrJ의 사용법을 익히기 위해

Spring 4 + MyBatis 3 + MariaDB로 제작한 게시판 예제 중 몇 가지를

MariaDB 대신에 Solr 서버를 데이터 베이스처럼 사용해서 구현했다.

게시판과 관련된 설명들은 자세하게 정리하지 않았으니

기존 게시판 예제의 정리를 읽어보길 바란다.


나머지 예제들 (총 8 가지의 게시판이 있음)도 구현해보면

Solr에 대한 이해를 높일 수 있고,

프로그래밍 실력을 향상시키는데 도움이 될 것이다.



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

3. Solr 예제 분석 - 스키마(Schema)  (0) 2020.01.12
4. Solr 예제 분석 - DIH  (0) 2020.01.12
1. Solr로 만드는 단순 게시판: 각종 설치  (18) 2017.08.24
2. SolrJ 사용법  (0) 2017.08.24
3. Solr 단순 게시판 (CRUD)  (0) 2017.08.24

+ Recent posts