jetalog.net


SolrJ를 이용한 색인 제어


이전 3편에서 말씀드렸듯 SolrJ를 이용하면 Java 프로그램 안에서 Solr에 접근할 수 있습니다. JSP 웹 사이트를 제작한 경우 새 색인 문서를 추가하기 위해서 어렵게 직접 HttpRequest에 데이터를 담아서 보낼 필요 없다는 뜻이죠. 아래와 같이 가독성 높은 코드를 만들 수 있습니다.


이번 4편에서는 사용자가 게시판에 글을 쓰고 수정하고 삭제할 때, 색인 문서를 추가하거나 삭제하도록 수정해보겠습니다.


색인 문서 추가, 수정

  1. 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();

     
  2. 아래 경로로 이동하여 새 글을 입력해주세요.
    나중에 검색을 위해 여러 글을 입력하시면 더 좋습니다.
    http://localhost:8080/board/board4Form

  3. Solr Admin의 Query 기능을 이용하여 색인된 모든 문서를 조회하시면 새로 작성한 게시글이 확인됩니다.
    http://localhost:8983/solr/#/board/query
  4. 새 게시물이 입력되는걸 확인했다면 이번에는 수정된 게시물이 새로 색인되는지 확인하겠습니다.
    기존 게시물을 수정해주세요.
  5. Solr Admin의 Query 기능을 이용하여 색인된 모든 문서를 조회하시면 수정한 게시물을 확인할 수 있습니다.
    http://localhost:8983/solr/#/board/query

색인 문서 삭제

  1. 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(); }



  2. 게시판에서 게시물 하나를 삭제해주세요.
  3. Solr Admin에서 문서가 삭제된 것을 확인할 수 있습니다.


개념 안내

  1. 색인 문서 수정
    Solr에 색인 문서를 추가할 때에는 색인 문서의 id를 지정합니다.

    만약 해당 id의 문서가 없다면 새 색인 문서를 생성합니다.
    반대로 해당 id의 문서가 있다면 새로 입력되는 문서로 대체합니다.

    따라서 문서를 수정하는 기능은 별도로 생성할 필요가 없습니다.

  2. SolrInputDocument
    Lucene에 담길 문서 클래스입니다.
    addField()를 이용해서 내용을 입력합니다.
    이 때, Solr의 managed-schema에서 정의한 Field와 일치해야 합니다.
    위 예제에서는 title, writer, board, date를 입력합니다.

  3. solr.add()
    Lucene에 입력 혹은 수정할 문서를 Collection으로 전달합니다.
    위 예제에서는 사용자가 작업을 할 때마다 전달하므로 Collection에 문서 하나만 담아서 전달합니다.

  4. solr.commit()
    추가, 수정, 삭제 등을 진행한 후 commit 명령을 전달해야 검색 결과에 반영이 됩니다.
    다시 말하자면 commit 명령을 내리기 전에는 기존에 색인된 내용들이 결과로 제공됩니다.
    RDBMS 등과 마찬가지로 작업 중 오류가 발생하거나, 잘못된 요청을 했다면 solr.rollback()을 이용하여 rollback 명령을 전달 할 수 있습니다.

  5. solr.deleteById()
    문서의 id 필드를 이용하여 특정 문서를 색인에서 삭제합니다.
    삭제를 위해 deleteById() 메소드 외에도 deleteByQuery(QUERY_STATEMENT) 메소드를 이용할 수 있습니다.
    deleteByQuery(QUERY_STATEMENT) 메소드는 QUERY_STATEMENT에 해당하는 모든 문서를 삭제할 수 있다.



< 3. SolrJ 적용하기

5. SolrJ를 이용한 검색 >


내용에 있는 오류나 질문은 댓글을 달아주세요.




저작자 표시 비영리 동일 조건 변경 허락
신고
댓글 로드 중…

트랙백을 확인할 수 있습니다

URL을 배껴둬서 트랙백을 보낼 수 있습니다