Compass 입문
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 입 니 다.
BookSearchController 과 AdvancedSearchController 의 방법 을 참고 하여 완전히 자체 적 으로 확장 할 수 있다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
thymeleaf로 HTML 페이지를 동적으로 만듭니다 (spring + gradle)지난번에는 에서 화면에 HTML을 표시했습니다. 이번에는 화면을 동적으로 움직여보고 싶기 때문에 입력한 문자를 화면에 표시시키고 싶습니다. 초보자의 비망록이므로 이상한 점 등 있으면 지적 받을 수 있으면 기쁩니다! ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.