Solr의 사용법을 익히기 위해
Spring + SolrJ + Solr (Lucene) 기반으로 게시판을 구현하였다.
2. SolrJ 사용법
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()을 호출하여 데이터 변경이 반영되도록 한다.
'서버 > 검색엔진' 카테고리의 다른 글
3. Solr 예제 분석 - 스키마(Schema) (0) | 2020.01.12 |
---|---|
4. Solr 예제 분석 - DIH (0) | 2020.01.12 |
1. Solr로 만드는 단순 게시판: 각종 설치 (18) | 2017.08.24 |
3. Solr 단순 게시판 (CRUD) (0) | 2017.08.24 |
4. Solr 단순 게시판 - 페이징과 검색 (0) | 2017.08.24 |