반응형
SolrJ를 이용한 검색
4편까지의 연재를 통해서 새 색인 문서를 추가하고 삭제하는 법을 확인하였습니다.
이 모든 과정은 사실 오늘을 위해서 배웠다고해도 과언이 아닙니다.
오늘 5편에서 드디어 Solr를 이용해 검색을 진행하겠습니다.
색인된 문서 검색
- 게시판에 샘플 데이터를 충분히 입력해주세요.
예제에서는 노래 가사를 사용하겠습니다. - 이제 검색 결과를 표시할 페이지를 디자인하겠습니다.
src/main/webapp/WEB-INF/jsp/board4/boardSearch.jsp를 생성하고 아래 코드를 입력해주세요.<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%> <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>board4</title> <script> function fn_formSubmit(){ document.form1.submit(); } </script> </head> <body> <form id="form1" name="form1" method="post"> <div> <input type="text" name="q" style="width:150px;" maxlength="50" value='<c:out value="${q}"/>' onkeydown="if(event.keyCode == 13) { fn_formSubmit();}"> <input name="btn_search" value="검색" class="btn_sch" type="button" onclick="fn_formSubmit()" /> </div> </form> <table border="1" style="width:650px"> <caption>검색 결과</caption> <colgroup> <col width='8%' /> <col width='*%' /> <col width='15%' /> <col width='15%' /> <col width='10%' /> <col width='10%' /> </colgroup> <thead> <tr> <th>번호</th> <th>제목</th> <th>등록자</th> <th>등록일</th> </tr> </thead> <tbody> <c:forEach var="listview" items="${listview}" varStatus="status"> <c:url var="link" value="board4Read"> <c:param name="brdno" value="${listview.id}" /> </c:url> <tr> <td><c:out value="${listview.id}"/></td> <td style="max-width: 100px; border: 1px solid black; overflow: hidden; white-space: nowrap; text-overflow: ellipsis;"> <a href="${link}"><c:out value="${listview.title}"/></a> </td> <td><c:out value="${listview.writer}"/></td> <td><c:out value="${listview.date}"/></td> </tr> </c:forEach> </tbody> </table> </body> </html>
- 검색 페이지를 표시하기 위해 src/main/java/gu/board4/board4Ctr.java에
아래 코드를 이용하여 board4Search() 메소드를 추가해주세요.@RequestMapping(value = "/board4Search") public String boardSearch(HttpServletRequest request, ModelMap modelMap) throws Exception { String q = request.getParameter("q"); if(!"".equals(q)) { SolrQuery query = new SolrQuery(); query.setQuery("text:" + q ); QueryResponse responseSolr = SolrJDriver.solr.query(".", query); SolrDocumentList results = responseSolr.getResults(); modelMap.addAttribute("q", q); modelMap.addAttribute("listview", results.toArray()); } return "board4/boardSearch"; }
- 모두 완료되었습니다!
아래 검색페이지에서 등록한 게시글을 검색해서 잘 표시되는지 확인해보세요.
http://localhost:8080/board/board4Search
개념 안내
- SolrQuery
질의문을 생성하는 클래스입니다.
질의문과 관련된 다양한 속성을 설정할 수 있습니다. - SolrQuery.setQuery()
필수로 정의해야 하는 속성입니다.
이번 예제에서는 managed-schema에 설정했던 text Field를 검색하도록 구현되어 있습니다.
- solr.query(".", query)
첫 번째 파라미터는 검색할 Collection을 지정합니다. 이번 예제에서는 이미 URL에 Collection이 지정되었기 때문에 .(현재 위치)를 입력합니다.
두 번째 파라미터는 속성이 설정된 SolrQuery 객체를 전달합니다.
질의가 완료되면 QueryResponse 객체를 반환합니다. - 검색 결과 정렬
본 예제에서는 9번 글 내용에 "love" 단어가 12번, 나머지 결과에는 본문에 2번, 1번씩 나오기 때문에 9번 글이 가장 위에 표시됩니다.
내용에 있는 오류나 질문은 댓글을 달아주세요.
반응형