Chris,

Did you ever get to reworking these instuctions using a display tab-able
list?

Cheers,

Chris



Chris Barham wrote:
> 
> Hi Matt,
> 
> Shay did a review over at the Compass forum and made some suggestions.
>  I will rework and incorporate them.  Also, as I will have to do this
> anyway, I will try to rework the Spring Controller to give a
> DisplayTag-able List and return the search hit highlight terms.
> 
> Once done I'll repost.
> 
> Shay's comments are at http://tinyurl.com/f9qm9  (which is
> http://forums.opensymphony.com/thread.jspa?threadID=35452&tstart=0 for
> those allergic to snipurl/tinurl :-) )
> 
> Regards,
> Chris
> 
> 
> 
> On 6/24/06, Matt Raible <[EMAIL PROTECTED]> wrote:
>> Great work Chris!  Thanks for the detailed instructions.  Hopefully
>> someone else can "tech review" them and we can get them on the wiki,
>> or possibly published in an article on java.net.  If anyone is
>> interested in writing an article for java.net (or another site), let
>> me know.  I can probably hook you up.
>>
>> Matt
>>
>> On 6/23/06, Chris Barham <[EMAIL PROTECTED]> wrote:
>> > Hi,
>> >
>> > I've been playing with Compass and Appfuse to give search capability.
>> > I made notes as I was going and post them here in case anyone else
>> > finds them useful.  A big thanks to Matt and Shay for these two
>> > projects, they work so well together :-)
>> >
>> > This is a barebones setup, my next job, (I think), is to rework the
>> > SpringController to give back a list with highlight terms on the
>> > search results so that Displaytag can render it, (If anyone has done
>> > this please let me know if this is the best approach).
>> >
>> > Once running you can browse the index using Luke
>> http://www.getopt.org/luke/
>> >
>> > Steps as follows:
>> >
>> > Integrate Compass search with Appfuse
>> > -----------------------------------------------------
>> >
>> > 1.      Get a new latest Appfuse project setup a la
>> > http://raibledesigns.com/wiki/AppFuseQuickStart.html  For this I used
>> > a project called weblogs, using Spring MVC and hibernate (Apache Derby
>> > as the RDBMS)
>> > 2.      Get Spring 2.0 (currently Rc1)
>> http://www.springframework.org/download
>> > 3.      Get Compass (currently 0.9.2SNAPSHOT)
>> http://www.opensymphony.com/compass/
>> > 4.      Install these…
>> > a.      Make directories under lib directory place jars as follows:
>> >
>> > compass-0.9.2-SNAPSHOT
>> > |-- commons-logging.jar
>> > |-- compass.jar
>> > |-- lucene-analyzers.jar
>> > |-- lucene-core.jar
>> > |-- lucene-highlighter.jar
>> > `-- lucene-snowball.jar
>> >
>> > and
>> >
>> > spring-2.0RC1/
>> > |-- acegi-security-1.0.0-RC2.jar
>> > |-- commons-codec-1.3.jar
>> > |-- ehcache-1.2.jar
>> > |-- spring-aspects.jar
>> > |-- spring-mock.jar
>> > |-- spring.jar
>> > |-- springmodules-validator-dev-20051217.jar
>> > `-- validator-rules.xml
>> >
>> >
>> > b.      Change lib.properties:
>> >
>> > #
>> > # Spring Framework - http://www.springframework.org
>> > #
>> > spring.version=2.0RC1
>> > spring.dir=${lib.dir}/spring-${spring.version}
>> > spring.jar=${spring.dir}/spring.jar
>> >
>> > #
>> > # Compass search http://www.opensymphony.com/compass/
>> > #
>> > compass.version=0.9.2-SNAPSHOT
>> > compass.dir=${lib.dir}/compass-${compass.version}
>> >
>> > 5.      Add compass to the service.compile.classpath and
>> > web.compile.classpath in properties.xml:
>> >         <fileset dir="${compass.dir}" includes="*.jar" />
>> > 6.      Add the compass jars to the war task in build.xml (so they get
>> > copied into the war)
>> >          <lib dir="${compass.dir}" includes="*.jar"/>
>> > 7.      Add the metadata files to src/dao/../model/
>> > Weblogs.cmd.xml – common metadata (optional) - this doesn't get used
>> > in this example
>> > E.g.:
>> > <?xml version="1.0"?>
>> > <!DOCTYPE compass-core-meta-data PUBLIC
>> >     "-//Compass/Compass Core Meta Data DTD 1.0//EN"
>> >    
>> "http://www.opensymphony.com/compass/dtd/compass-core-meta-data.dtd";>
>> >
>> > <compass-core-meta-data>
>> >         <meta-data-group id="weblogs" displayName="Weblogs Meta Data">
>> >                 <description>mongoose Meta Data</description>
>> >                  <uri>http://compass/weblogs</uri>
>> >                 <meta-data id="createddate" displayName="createddate">
>> >                         <description>CreatedDate</description>
>> >                         <uri>http://compass/weblogs/createddate</uri>
>> >                         <name format="dd/MM/yyyy">createddate</name>
>> >                 </meta-data>
>> >         </meta-data-group>
>> > </compass-core-meta-data>
>> >
>> >
>> > Mapping metadata: weblogs.cpm.xml
>> >
>> > <?xml version="1.0"?>
>> > <!DOCTYPE compass-core-mapping PUBLIC
>> >     "-//Compass/Compass Core Mapping DTD 1.0//EN"
>> >     "http://www.opensymphony.com/compass/dtd/compass-core-mapping.dtd";>
>> >
>> > <compass-core-mapping package="com.pobox.cbarham.model">
>> >         <!-- ============================================= -->
>> >         <!--  USER           -->
>> >         <!-- ============================================= -->
>> >         <class name="User" alias="user" root="true">
>> >                 <id name="id" />
>> >                 <constant>
>> >                         <meta-data>type</meta-data>
>> >                         <meta-data-value>user</meta-data-value>
>> >                 </constant>
>> >                 <property name="lastName">
>> >                         <meta-data boost="2">lastName</meta-data>
>> >                 </property>
>> >                 <property name="firstName">
>> >                         <meta-data>firstName</meta-data>
>> >                 </property>
>> >                 <property name="enabled">
>> >                         <meta-data>enabled</meta-data>
>> >                 </property>
>> >                 <property name="phoneNumber">
>> >                         <meta-data>phoneNumber</meta-data>
>> >                 </property>
>> >                 <property name="email">
>> >                         <meta-data>email</meta-data>
>> >                 </property>
>> >                 <property name="address">
>> >                         <meta-data>address</meta-data>
>> >                 </property>
>> >                 <property name="email">
>> >                         <meta-data>email</meta-data>
>> >                 </property>
>> >                 <property name="accountExpired">
>> >                         <meta-data>accountExpired</meta-data>
>> >                 </property>
>> >                 <property name="accountLocked">
>> >                         <meta-data>accountLocked</meta-data>
>> >                 </property>
>> >                 <property name="username">
>> >                         <meta-data>username</meta-data>
>> >                 </property>
>> >                 <property name="website">
>> >                         <meta-data>website</meta-data>
>> >                 </property>
>> >
>> >                 <component name="roles" ref-alias="role" />
>> >                 <component name="address" ref-alias="address" />
>> >         </class>
>> >         <!-- ============================================= -->
>> >         <!--  ROLE            -->
>> >         <!-- ============================================= -->
>> >         <class name="Role" alias="role" root="false">
>> >                 <id name="id" />
>> >                 <constant>
>> >                         <meta-data>type</meta-data>
>> >                         <meta-data-value>role</meta-data-value>
>> >                 </constant>
>> >                 <property name="description">
>> >                         <meta-data>description</meta-data>
>> >                 </property>
>> >                 <property name="name">
>> >                         <meta-data>name</meta-data>
>> >                 </property>
>> >         </class>
>> >         <!-- ============================================= -->
>> >         <!--  ADDRESS            -->
>> >         <!-- ============================================= -->
>> >         <class name="Address" alias="address" root="false">
>> >                 <constant>
>> >                         <meta-data>type</meta-data>
>> >                         <meta-data-value>address</meta-data-value>
>> >                 </constant>
>> >                 <property name="address">
>> >                         <meta-data>address</meta-data>
>> >                 </property>
>> >                 <property name="city">
>> >                         <meta-data>address</meta-data>
>> >                 </property>
>> >                 <property name="country">
>> >                         <meta-data>address</meta-data>
>> >                 </property>
>> >                 <property name="postalCode">
>> >                         <meta-data>address</meta-data>
>> >                 </property>
>> >                 <property name="province">
>> >                         <meta-data>address</meta-data>
>> >                 </property>
>> >         </class>
>> >
>> > </compass-core-mapping>
>> >
>> > 8.      Edit src/service/…/service/applicationContext-service.xml
>> >  And add the compass spring beans: (change the resource locations
>> > accordingly) – also note that this puts the index on the root
>> > filesystem in a directory called compass
>> >
>> >         <!-- COMPASS START -->
>> >         <bean id="compass" class="org.compass.spring.LocalCompassBean">
>> >                 <property name="resourceLocations">
>> >                         <list>
>> >                                 <value>classpath:{PATH-TO-MODEL}
>> /model/weblogs.cmd.xml</value>
>> >                                 <value>classpath: :{PATH-TO-MODEL
>> /model/weblogs.cpm.xml</value>
>> >                         </list>
>> >                 </property>
>> >                 <property name="compassSettings">
>> >                         <props>
>> >                                 <prop
>> key="compass.engine.connection">file:///compass/weblogs</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 bean="compass" />
>> >                 </property>
>> >                 <property name="gpsDevices">
>> >                         <list>
>> >                                 <bean
>> class="org.compass.spring.device.SpringSyncTransactionGpsDeviceWrapper">
>> >                                         <property name="gpsDevice"
>> ref="hibernateGpsDevice" />
>> >                                 </bean>
>> >                         </list>
>> >                 </property>
>> >         </bean>
>> >         <!-- COMPASS END -->
>> >
>> > 9.      Add in the JSP's to drive the index and search….
>> > a.       Under web/pages add a reindex.jsp:
>> > <%@ include file="/common/taglibs.jsp"%>
>> > <P>
>> > <H2>Compass Index</H2>
>> > <P>
>> > Use the Index button to index the database using Compass::Gps. The
>> > operation will
>> > delete the current index and reindex the database based on the
>> > mappings and devices
>> > defined in the Compass::Gps configuration context.
>> > <FORM method="POST" action="<c:url value="/reindex.html"/>">
>> >         <spring:bind path="command.doIndex">
>> >                 <INPUT type="hidden" name="doIndex" value="true" />
>> >         </spring:bind>
>> >     <INPUT type="submit" value="Index"/>
>> > </FORM>
>> > <c:if test="${! empty indexResults}">
>> >         <P>Indexing took: <c:out value="${indexResults.indexTime}"
>> />ms.
>> > </c:if>
>> > <P>
>> >
>> > b.      under web/pages add search.jsp:
>> > <%@ include file="/common/taglibs.jsp"%>
>> > <title>Search</title>
>> > <content tag="heading">
>> > Search:
>> > </content>
>> > <FORM method="GET">
>> >         <spring:bind path="command.query">
>> >                 <INPUT type="text" size="20" name="query" value="<c:out
>> > value="${status.value}"/> " />
>> >         </spring:bind>
>> >
>> >         <P />
>> >                 <INPUT type="submit" value="Search" />
>> > </FORM>
>> > <p />
>> >         <c:if test="${! empty searchResults}">
>> >                 <P />
>> >                         Search took
>> >                         <c:out value="${searchResults.searchTime}" />
>> >                         ms
>> >                 <P />
>> >                 <TABLE border="2">
>> >                         <TR>
>> >                                 <TH>
>> >                                         SCORE
>> >                                 </TH>
>> >                                 <TH>
>> >                                         TYPE
>> >                                 </TH>
>> >                                 <TH>
>> >                                         ID
>> >                                 </TH>
>> >                         </TR>
>> >
>> >                         <c:forEach var="hit"
>> items="${searchResults.hits}">
>> >                                 <P />
>> >                                 <TR>
>> >                                         <TD>
>> >                                                 <fmt:formatNumber
>> type="percent" value="${hit.score}" />
>> >                                         </TD>
>> >                                         <TD>
>> >                                                 <c:out
>> value="${hit.alias}" />
>> >
>> >                                         </TD>
>> >                                         <TD>
>> >                                                 <c:out
>> value="${hit.data.id}" />
>> >                                         </TD>
>> >                                 </TR>
>> >                         </c:forEach>
>> >                 </TABLE>
>> >
>> >         </c:if>
>> >
>> > c.      Wire up the controllers – edit web/WEB-INF/action-servlet.xml
>> and
>> > add these beans:
>> >
>> >         <bean id="searchController"
>> > class="org.compass.spring.web.mvc.CompassSearchController">
>> >                 <property name="compass"><ref
>> bean="compass"/></property>
>> >                 <property
>> name="searchView"><value>searchView</value></property>
>> >                 <property
>> name="searchResultsView"><value>searchResultsView</value></property>
>> >                 <property name="pageSize"><value>10</value></property>
>> >         </bean>
>> >         <!-- ====  COMPASS SEARCH CONTROLLER ==== -->
>> >
>> >         <bean id="indexController"
>> > class="org.compass.spring.web.mvc.CompassIndexController">
>> >                 <property name="compassGps"><ref
>> bean="compassGps"/></property>
>> >                 <property
>> name="indexView"><value>reindexView</value></property>
>> >                 <property
>> name="indexResultsView"><value>reindexResultsView</value></property>
>> >         </bean>
>> >
>> >     <!-- View Resolver for JSPs -->
>> >         <bean id="rbViewResolver"
>> >
>> class="org.springframework.web.servlet.view.ResourceBundleViewResolver">
>> >                 <property
>> name="basename"><value>views</value></property>
>> >                 <property name="order"><value>0</value></property>
>> >         </bean>
>> > d.      Also add them into the urlMapping:
>> >         <prop key="/search.html">searchController</prop>
>> > <prop key="/reindex.html">indexController</prop>
>> >
>> > e.      Add a file views.properties under web/WEB-INF/classes
>> containing:
>> > searchView.class=org.springframework.web.servlet.view.JstlView
>> > searchView.url=/WEB-INF/pages/search.jsp
>> >
>> > searchResultsView.class=org.springframework.web.servlet.view.JstlView
>> > searchResultsView.url=/WEB-INF/pages/search.jsp
>> >
>> > reindexView.class=org.springframework.web.servlet.view.JstlView
>> > reindexView.url=/WEB-INF/pages/reindex.jsp
>> >
>> > reindexResultsView.class=org.springframework.web.servlet.view.JstlView
>> > reindexResultsView.url=/WEB-INF/pages/reindex.jsp
>> >
>> > f.      Add in menu – edit menu-config in web/WEB-INF add the reindex
>> to
>> > the admin menu:
>> > <Item name="ReIndex" title="menu.reindex" page="/reindex.html"
>> roles="admin" />
>> > g.      add search to it's own menu:
>> >         <Menu name="SearchMenu" title="menu.search" page="/search.html"
>> wifth="60" />
>> > h.      now edit /web/pages/menu/jsp to add the new search menu:
>> > <menu:displayMenu name="FileUpload"/>
>> > <menu:displayMenu name="SearchMenu"/> <!--  ADDED LiNE -->
>> >  <menu:displayMenu name="AdminMenu"/>
>> > i.      add the menu properties in
>> > WEB-INF/classes/ApplicationResources.properties :
>> > menu.search=Search
>> > menu.reindex=Re-Index
>> >
>> >
>> > Cheers
>> > Chris
>> >
>> > --
>> > -------------------------------------------------
>> > Christopher Barham
>> > [EMAIL PROTECTED]
>> >
>> > ---------------------------------------------------------------------
>> > To unsubscribe, e-mail: [EMAIL PROTECTED]
>> > For additional commands, e-mail: [EMAIL PROTECTED]
>> >
>> >
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: [EMAIL PROTECTED]
>> For additional commands, e-mail: [EMAIL PROTECTED]
>>
>>
>>
> 
> 
> -- 
> -------------------------------------------------
> Christopher Barham
> [EMAIL PROTECTED]
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
> 
> 
> 

-- 
View this message in context: 
http://www.nabble.com/search---integrate-compass-%28lucene%29-and-appfuse-tf1839560s2369.html#a11670015
Sent from the AppFuse - User mailing list archive at Nabble.com.

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to