Compass 입문

1. 개술
Compass 는 lucene, Spring, Hibernate 세 가 지 를 합 쳐 낮은 비용 으로 기업 응용 에서 의 검색 기능 을 신속하게 실현 한다.
HomePage: http://www.opensymphony.com/compass/  
springside 에 서 는 copas 로 도서 검색 을 했 습 니 다. 빠 른 구축 절 차 는 다음 과 같 습 니 다.
1. 간단 한 compass annotation 으로 Book 대상 을 Lucene 에 투사 합 니 다.
2. copass 가 기본적으로 제공 하 는 Spring MVC 기반 Index Controller 와 Search Controller 를 설정 합 니 다.
3. 검색 결과 의 디 스 플레이 페이지 를 작성 하여 contrller 가 되 돌아 오 는 변 수 를 표시 합 니 다.
 
2. Object / Search Engine Mapping 의 Annotations 설정
JDK 5 의 annotation 을 사용 하여 OSEM (Object / Search Engine Mapping) 을 진행 하 는 것 은 xml 파일 로 누 르 는 것 보다 훨씬 간단 합 니 다. 다음은 간단 한 검색 클래스 입 니 다. @ SearchableID, @ SearchableProperty 와 @ SearchableComponent 를 볼 수 있 습 니 다. 세 개의 표 시 는 각각 메 인 키, 검색 가능 한 속성 과 관련 된 것 을 나타 내 고 다른 검색 가능 한 대상 을 나타 낸다. 또한 Compass 는 POJO 에 기본 구조 함수 가 있어 야 하 며 equals () 와 hashcode () 를 실현 해 야 한다 고 요구한다.
public class Product  {	 
	@SearchableId
	private Integer id;
	private Category category;
	private String name;
	private Double unitprice;
	@SearchableProperty(name = "name")
    public String getName() {
        return this.name;
    }
	@SearchableComponent (refAlias = "category")
    public Category getCategory() {
        return this.category;
    }
	public Double getUnitprice() {
        return this.unitprice;
    }

 
3. spring, hibenate 와 통합 설정
3.1 spring 프로필
hiberante 의 session Factory, transaction Manager 는 여러분 에 비해 익숙 합 니 다. 여기 도 가 져 왔 습 니 다.검색엔진 검색 을 마 칠 수 있 습 니 다. 다음은 copas 가 spring 에서 의 간단명료 한 설정 입 니 다. 자세 한 내용 은 springside 의 applicationContext-lucene.xml 을 클릭 하 십시오. :
<beans>
<bean id="annotationConfiguration"          class="org.compass.annotations.config.CompassAnnotationsConfiguration"></bean>

<bean id="compass" class="org.compass.spring.LocalCompassBean">
        <!-- anontaition    	-->        <property name="classMappings">            <list>                <value>org.springside.bookstore.domain.Book</value>            </list>        </property>      <property name="compassConfiguration" ref="annotationConfiguration"/>    <property name="compassSettings">
        <props>
            <prop key="compass.engine.connection">file://${user.home}/springside/compass</prop>
            <prop key="compass.transaction.factory">org.compass.spring.transaction.SpringSyncTransactionFactory</prop>
        </props>
    </property>
    <property name="transactionManager" ref="transactionManager"/>
</bean>  <bean id="hibernateGpsDevice" class="org.compass.spring.device.hibernate.SpringHibernate3GpsDevice">    <property name="name">        <value>hibernateDevice</value>    </property>    <property name="sessionFactory" ref="sessionFactory"/></bean>  <bean id="compassGps" class="org.compass.gps.impl.SingleCompassGps" init-method="start" destroy-method="stop">
  <property name="compass" ref="compass"/>
  <property name="gpsDevices">
      <list>
          <ref local="hibernateGpsDevice"/>
      </list>
  </property></bean></beans>

 
위 에서 주의해 야 할 설정 은:
annotation Configuration: annotation 설정 을 사용 하여 bookcompass. engine. connection 과 같은 POJO 를 지정 합 니 다. 서버 에 저 장 된 색인 파일 의 저장 경로 입 니 다. hibenate GpsDevice: hibenate 와 의 연결, Hibernate 3 이벤트 시스템 으로 Real Time Data Mirroring 을 지원 합 니 다. Hiberante 의 데이터 변경 을 통 해 자동 으로 색인 에 반 사 됩 니 다.
3.2 웹 컨트롤 러 설정
두 개의 컨트롤 러 는 모두 이미 만들어 진 것 이 므 로 관련 옵션 만 설정 하면 된다.
자세 한 내용 은 springside 의 bookstore-servlet.xml 을 보십시오.
 
 
<bean id="indexBookController" class="org.compass.spring.web.mvc.CompassIndexController">		
<property name="compassGps" ref="compassGps"/>		
<property name=		"indexView" value="/admin/indexBook.jsp"/>		
<property name=		"indexResultsView" value="/admin/indexBook.jsp"/>    </bean>       
 <bean id="searchBookController" class="org.compass.spring.web.mvc.CompassSearchController">		
<property name="compass" ref="compass"/>		 <propertyname="searchView"value="/home/top.jsp"/>		<property name=		"searchResultsView" value="/home/searchBook.jsp"/>	
	<property name=		"pageSize" value="5"/>    
</bean>

 
 
3.3 View JSP
  간단 한 검색 페이지: query 인자 하나만 필요 합 니 다:
<INPUT type="text" size="20" name="query"> 

 
 
결과 페이지:
결과 페이지 는 다음 을 포함 하여 몇 개의 변 수 를 되 돌려 줍 니 다.
searchResults (검색 결과) 는 hits (결과) 와 searchtime (시간 소모) 를 포함 합 니 다.    pages (페이지 정보) page 포함from page_기다리다    command (원래 조회 요청)
구체 적 으로 springside 의 advancedSearch.jsp 을 사용 합 니 다. ,다음은 간단 한 코드 입 니 다.
<c:if test="${not empty searchResults}">
                  : <c:out value="${searchResults.searchTime}"/>ms
                               <c:forEach var="hit" items="${searchResults.hits}">
                    <c:choose>
                        <c:when test="${hit.alias == 'book'}">
                            <div class="left_content">
                                <p>
                                    <a href="#" class= "title"> 《${hit.data.name}》
                                    </a>
                                    <br/>   :
                                    ${hit.data.author}
                            <br/>
                        </div>
                    </c:when>
                </c:choose>
            </c:forEach>
	</c:if>

 
 
4. 고급 검색 확장
고급 검색 을 확장 하 는 것 은 간단 합 니 다. SpringSide 는 다음 과 같은 임 의 단 어 를 포함 하고 다음 과 같은 단 어 를 포함 하지 않 으 며 분류 선택 등 조건 과 각 페이지 의 표시 항목 수 에 대한 확인 을 포함 하지 않 습 니 다.
더 많은 조건 이 필요 하 다 면:
1. 검색 페이지 를 강화 하고 더 많은 조건 을 추가 합 니 다.
2. compass 를 확장 하 는 command class 는 검색 조건 페이지 에서 전 달 된 조건 을 받 아들 입 니 다.springside 의 AdvancedSearchCommand 에서 Compass 의 원래 클래스 에서 확장 하거나 확장 합 니 다.
3. compass 를 확장 하 는 searchController 는 command 의 변 수 를 Lucene 문법 규칙 의 query 변수 에 맞 게 재 처리 하면 됩 니 다 (springside 의 AdvancedSearchController 참조). 또한 검색 조건 페이지 에 도서 분류 목록 과 같은 변 수 를 조회 할 수 있 습 니 다.
   springside 의 AdvancedSearchController 에서 확장 하여 onSetupCommand () 를 다시 불 러 올 수 있 습 니 다. 부모 의 방법 을 참고 하여 자신의 조건 을 추가 할 수 있 습 니 다.reference Data () 를 다시 불 러 오고 도서 분류 목록 이라는 조건 을 AdvancedSearchCommand 에 추가 합 니 다. 의 reference Data Map 에서 검색 조건 페이지 를 표시 합 니 다. 예 는 BookSearchController 입 니 다.
BookSearchControllerAdvancedSearchController 의 방법 을 참고 하여 완전히 자체 적 으로 확장 할 수 있다.

좋은 웹페이지 즐겨찾기