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()을 호출하여 데이터 변경이 반영되도록 한다.




+ Recent posts