반응형
SolrJ를 이용한 색인 제어
이전 3편에서 말씀드렸듯 SolrJ를 이용하면 Java 프로그램 안에서 Solr에 접근할 수 있습니다. JSP 웹 사이트를 제작한 경우 새 색인 문서를 추가하기 위해서 어렵게 직접 HttpRequest에 데이터를 담아서 보낼 필요 없다는 뜻이죠. 아래와 같이 가독성 높은 코드를 만들 수 있습니다.
이번 4편에서는 사용자가 게시판에 글을 쓰고 수정하고 삭제할 때, 색인 문서를 추가하거나 삭제하도록 수정해보겠습니다.
색인 문서 추가, 수정
src/main/java/gu/board4/board4Svc.java 파일의 43번째 줄에 아래 코드를 추가합니다.
SolrInputDocument solrDoc = new SolrInputDocument(); solrDoc.addField("id", param.getBrdno()); solrDoc.addField("title", param.getBrdtitle()); solrDoc.addField("writer", param.getBrdwriter()); solrDoc.addField("board", param.getBrdmemo()); solrDoc.addField("date", param.getBrddate()); Collection<SolrInputDocument> solrDocs = new ArrayList<SolrInputDocument>(); solrDocs.add(solrDoc); SolrJDriver.solr.add(solrDocs); SolrJDriver.solr.commit();
- 아래 경로로 이동하여 새 글을 입력해주세요.
나중에 검색을 위해 여러 글을 입력하시면 더 좋습니다.
http://localhost:8080/board/board4Form - Solr Admin의 Query 기능을 이용하여 색인된 모든 문서를 조회하시면 새로 작성한 게시글이 확인됩니다.
http://localhost:8983/solr/#/board/query - 새 게시물이 입력되는걸 확인했다면 이번에는 수정된 게시물이 새로 색인되는지 확인하겠습니다.
기존 게시물을 수정해주세요. - Solr Admin의 Query 기능을 이용하여 색인된 모든 문서를 조회하시면 수정한 게시물을 확인할 수 있습니다.
http://localhost:8983/solr/#/board/query
색인 문서 삭제
src/main/java/gu/board4/board4Svc.java 파일의 deleteBoardOne() 메소드를 아래와 같이 수정해주세요.
public void deleteBoardOne(String param) throws Exception { sqlSession.delete("deleteBoard4One", param); SolrJDriver.solr.deleteById(param); SolrJDriver.solr.commit(); }
- 게시판에서 게시물 하나를 삭제해주세요.
- Solr Admin에서 문서가 삭제된 것을 확인할 수 있습니다.
개념 안내
- 색인 문서 수정
Solr에 색인 문서를 추가할 때에는 색인 문서의 id를 지정합니다.
만약 해당 id의 문서가 없다면 새 색인 문서를 생성합니다.
반대로 해당 id의 문서가 있다면 새로 입력되는 문서로 대체합니다.
따라서 문서를 수정하는 기능은 별도로 생성할 필요가 없습니다. - SolrInputDocument
Lucene에 담길 문서 클래스입니다.
addField()를 이용해서 내용을 입력합니다.
이 때, Solr의 managed-schema에서 정의한 Field와 일치해야 합니다.
위 예제에서는 title, writer, board, date를 입력합니다. - solr.add()
Lucene에 입력 혹은 수정할 문서를 Collection으로 전달합니다.
위 예제에서는 사용자가 작업을 할 때마다 전달하므로 Collection에 문서 하나만 담아서 전달합니다. - solr.commit()
추가, 수정, 삭제 등을 진행한 후 commit 명령을 전달해야 검색 결과에 반영이 됩니다.
다시 말하자면 commit 명령을 내리기 전에는 기존에 색인된 내용들이 결과로 제공됩니다.
RDBMS 등과 마찬가지로 작업 중 오류가 발생하거나, 잘못된 요청을 했다면 solr.rollback()을 이용하여 rollback 명령을 전달 할 수 있습니다. - solr.deleteById()
문서의 id 필드를 이용하여 특정 문서를 색인에서 삭제합니다.
삭제를 위해 deleteById() 메소드 외에도 deleteByQuery(QUERY_STATEMENT) 메소드를 이용할 수 있습니다.
deleteByQuery(QUERY_STATEMENT) 메소드는 QUERY_STATEMENT에 해당하는 모든 문서를 삭제할 수 있다.
내용에 있는 오류나 질문은 댓글을 달아주세요.
반응형