jetalog.net


SolrJ를 이용한 검색


4편까지의 연재를 통해서 새 색인 문서를 추가하고 삭제하는 법을 확인하였습니다.

이 모든 과정은 사실 오늘을 위해서 배웠다고해도 과언이 아닙니다.


오늘 5편에서 드디어 Solr를 이용해 검색을 진행하겠습니다.


색인된 문서 검색

  1. 게시판에 샘플 데이터를 충분히 입력해주세요.
    예제에서는 노래 가사를 사용하겠습니다.
  2. 이제 검색 결과를 표시할 페이지를 디자인하겠습니다.
    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>

  3. 검색 페이지를 표시하기 위해 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";
    }

     
  4. 모두 완료되었습니다!
    아래 검색페이지에서 등록한 게시글을 검색해서 잘 표시되는지 확인해보세요.
    http://localhost:8080/board/board4Search

개념 안내

  1. SolrQuery
    질의문을 생성하는 클래스입니다.
    질의문과 관련된 다양한 속성을 설정할 수 있습니다.

  2. SolrQuery.setQuery()
    필수로 정의해야 하는 속성입니다.
    이번 예제에서는 managed-schema에 설정했던 text Field를 검색하도록 구현되어 있습니다.
     
  3. solr.query(".", query)
    첫 번째 파라미터는 검색할 Collection을 지정합니다. 이번 예제에서는 이미 URL에 Collection이 지정되었기 때문에 .(현재 위치)를 입력합니다.
    두 번째 파라미터는 속성이 설정된 SolrQuery 객체를 전달합니다.
    질의가 완료되면 QueryResponse 객체를 반환합니다.

  4. 검색 결과 정렬
    본 예제에서는 9번 글 내용에 "love" 단어가 12번, 나머지 결과에는 본문에 2번, 1번씩 나오기 때문에 9번 글이 가장 위에 표시됩니다.



< 4. SolrJ를 이용한 색인 제어

6. 검색 결과 강조하기 >


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




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

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

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