home *** CD-ROM | disk | FTP | other *** search
- <?xml version="1.0"?>
- <!--
- Copyright 1999-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
- <xsp:page language="java"
- xmlns:xsp="http://apache.org/xsp"
- xmlns:xsp-request="http://apache.org/xsp/request/2.0">
-
- <xsp:structure>
- <xsp:include>org.apache.avalon.framework.context.ContextException</xsp:include>
- <xsp:include>org.apache.avalon.framework.component.ComponentException</xsp:include>
-
- <xsp:include>org.apache.cocoon.ProcessingException</xsp:include>
- <xsp:include>org.apache.cocoon.components.language.markup.xsp.XSPUtil</xsp:include>
-
- <xsp:include>org.apache.cocoon.components.search.*</xsp:include>
-
- <xsp:include>org.apache.lucene.analysis.Analyzer</xsp:include>
- <xsp:include>org.apache.lucene.store.*</xsp:include>
- <xsp:include>org.apache.lucene.document.*</xsp:include>
- <xsp:include>org.apache.lucene.search.Hits</xsp:include>
-
- <xsp:include>java.util.*</xsp:include>
-
- </xsp:structure>
-
- <xsp:logic>
- File workDir = null;
- /** Contextualize this class */
- public void contextualize(Context context) throws ContextException {
- super.contextualize( context );
- workDir = (File) context.get(Constants.CONTEXT_WORK_DIR);
- }
-
- LuceneCocoonSearcher lcs;
- Directory directory;
- Analyzer analyzer = LuceneCocoonHelper.getAnalyzer( "org.apache.lucene.analysis.standard.StandardAnalyzer" );
-
- Hits search( String query_string ) throws ProcessingException {
- Hits hits = null;
- try {
- lcs = (LuceneCocoonSearcher)this.manager.lookup( LuceneCocoonSearcher.ROLE );
- lcs.setAnalyzer( analyzer );
- if (directory == null) {
- directory = LuceneCocoonHelper.getDirectory( new File( workDir, "index" ), false );
- }
- lcs.setDirectory( directory );
- hits = lcs.search( query_string, LuceneXMLIndexer.BODY_FIELD );
- start = 0;
- end = Math.min(hits.length(), start + hitsPerPage);
- } catch (IOException ioe) {
- // ignore ??
- throw new ProcessingException( "IOException in search", ioe );
- } catch (ProcessingException pe) {
- // ignore ??
- Throwable t = pe.getCause();
- if (t instanceof org.apache.lucene.queryParser.ParseException) {
- // ignore it or write info about reason
- } else {
- throw new ProcessingException( "ProcessingException in search", pe );
- }
- } catch (ComponentException ce) {
- // ignore ??
- throw new ProcessingException( "ComponentException in search", ce );
- } finally {
- if (lcs != null) {
- this.manager.release( lcs );
- }
- lcs = null;
- }
-
- return hits;
- }
- int hitsPerPage = 10;
- int start = 0;
- int end = 0;
- Hits hits;
- LuceneCocoonPager luceneCocoonPager;
- </xsp:logic>
-
- <page>
- <xsp:logic>
- String queryString = <xsp-request:get-parameter name="queryString" default=""/>;
- boolean findIt = "Find!".equals( <xsp-request:get-parameter name="find"/> );
- Integer startIndex = null;
- Integer pageLength = null;
- try {
- if (<xsp-request:get-parameter name="previous"/> != null) {
- startIndex = new Integer( <xsp-request:get-parameter name="startPreviousIndex" default="0"/> );
- } else if (<xsp-request:get-parameter name="next"/> != null) {
- startIndex = new Integer( <xsp-request:get-parameter name="startNextIndex"/> );
- } else {
- startIndex = new Integer( 0 );
- }
- pageLength = new Integer( <xsp-request:get-parameter name="pageLength" default="10"/> );
- } catch (NumberFormatException nfe) {
- // ignore it
- }
- </xsp:logic>
-
- <title>Cocoon XML Search Interface</title>
- <content>
- <a href="http://jakarta.apache.org/lucene/"><img border="0" alt="Lucene Logo" src="images/lucene_green_300.gif"/></a>
- <para>
- <font size="-1">
- <a target="_blank" href="statistic">Index Statistics</a> |
- <a href="welcome">Welcome</a>
- </font>
- </para>
- <para>
- <form action="search">
- <input type="text" name="queryString" size="60">
- <xsp:attribute name="value"><xsp:expr>queryString</xsp:expr></xsp:attribute>
- </input>
- <input type="submit" name="find" value="Find!"/>
- </form>
- </para>
- <para>
- Help by example (see also the
- <a href="http://lucene.sourceforge.net/cgi-bin/faq/faqmanager.cgi">Lucene FAQ</a>)
- <table cellspacing="2" cellpadding="2">
- <tr bgcolor="#dddedd" valign="top">
- <td width="50%"><font size="-2" >
- <ul>
- <li>free AND "text search"
- Search for documents which contain the word "free" and the
- phrase "text search"
- </li>
- <li>+text search
- Search for documents which must contain the word "text" and
- optionally contain the word "search".
- </li>
- <li>giants -football
- Search for "giants" but omit documents containing "football"
- </li>
- </ul>
- </font></td>
-
- <td><font size="-2">
- <ul>
- <li>body:john
- Search for documents containing "john" in the body field.
- The field "body" is used by default.
- Thus query "body:john" is equivalent to query "john".
- </li>
- <li>s1@title:cocoon
- Search for documents containing "cocoon" in the
- using field s1@title, ie searching in
- title attribute of s1 element of xml document.
- </li>
- </ul>
- </font></td>
- </tr>
- </table>
- </para>
- <para>
- SearchResult:
- <xsp:logic>
- if (queryString != null && queryString.length() != 0) {
-
- // do the search, search results are available in hits
- hits = search( queryString );
- luceneCocoonPager = new LuceneCocoonPager( hits );
- if (startIndex != null && pageLength != null) {
- luceneCocoonPager.setStartIndex( startIndex.intValue() );
- luceneCocoonPager.setCountOfHitsPerPage( pageLength.intValue() );
- }
- <xsp:content>
- Total Hits: <xsp:expr>hits.length()</xsp:expr>
- </xsp:content>
- }
- </xsp:logic>
- </para>
- <para>
- <table width="90%" cellpadding="4" border="1">
- <tr>
- <td>Score</td><td>Count</td><td>URL</td>
- </tr>
- <xsp:logic>
- if (luceneCocoonPager!= null && luceneCocoonPager.hasNext()) {
- int counter = luceneCocoonPager.getStartIndex();
- List l = (List)luceneCocoonPager.next();
- Iterator i = l.iterator();
- for (; i.hasNext(); counter++) {
- LuceneCocoonPager.HitWrapper hw = (LuceneCocoonPager.HitWrapper)i.next();
- Document doc = hw.getDocument();
- float score = hw.getScore();
- String url = doc.get( LuceneXMLIndexer.URL_FIELD );
-
- <xsp:content>
- <tr>
- <td> <xsp:expr>String.valueOf((int)(score * 100.0f))</xsp:expr>% </td>
- <td> <xsp:expr>String.valueOf(counter + 1)</xsp:expr> </td>
- <td>
- <a target="_blank">
- <xsp:attribute name="href"><xsp:expr>url</xsp:expr></xsp:attribute>
- <xsp:expr>url</xsp:expr>
- </a>
- </td>
- </tr>
- </xsp:content>
- }
- }
- </xsp:logic>
- </table>
- </para>
- <para>
- <xsp:logic>
- if (luceneCocoonPager!= null && luceneCocoonPager != null &&
- (luceneCocoonPager.hasNext() || luceneCocoonPager.hasPrevious())) {
- <xsp:content>
- <form action="search">
- <input type="hidden" name="queryString">
- <xsp:attribute name="value"><xsp:expr>String.valueOf(queryString)</xsp:expr></xsp:attribute>
- </input>
- <input type="hidden" name="pageLength">
- <xsp:attribute name="value"><xsp:expr>String.valueOf(luceneCocoonPager.getCountOfHitsPerPage())</xsp:expr></xsp:attribute>
- </input>
- <xsp:logic>
- if (luceneCocoonPager.hasPrevious()) {
- <input type="hidden" name="startPreviousIndex">
- <xsp:attribute name="value"><xsp:expr>String.valueOf(luceneCocoonPager.previousIndex())</xsp:expr></xsp:attribute>
- </input>
- <input type="submit" name="previous" value="previous"/>
- }
- </xsp:logic>
-
- <xsp:logic>
- if (luceneCocoonPager.hasNext()) {
- <input type="hidden" name="startNextIndex">
- <xsp:attribute name="value"><xsp:expr>String.valueOf(luceneCocoonPager.nextIndex())</xsp:expr></xsp:attribute>
- </input>
- <input type="submit" name="next" value="next"/>
- }
- </xsp:logic>
- </form>
- </xsp:content>
- }
- </xsp:logic>
- </para>
- </content>
- </page>
-
- </xsp:page>
-
-