[xwiki-dev] Costumized Lucene Search Page
Vincent Massol
vincent at massol.net
Thu Apr 19 09:38:07 CEST 2007
On Apr 19, 2007, at 9:36 AM, Vincent Massol wrote:
> Hi Michael/Jens,
>
> Thanks for your contribution Michael.
>
> 1) I didn't know Jens had a page documenting the Lucene plugin. The
> page is quite nice and much better than ours at http://
> www.xwiki.org/xwiki/bin/view/Code/LucenePlugin.
>
> Jens, would you mind if we merge the content of your page in the
> one at xwiki.org? Also, my understanding is that you donated the
> Lucene plugin to the XWiki project some time back. Is that correct?
> If so maybe we could deprecate your lucene doc page (once and if
> you agree to merge the content with the one on xwiki.org). WDYT?
>
> 2) Michael, In Velocity, looping is done with foreach. That's the
> only loop there is I think.
>
> 3) Michael, what would be nice would be if you could add your code
> as a Code Snippet on xwiki.org: http://www.xwiki.org/xwiki/bin/view/
> Code/Snippets (there's a "Add snippet" on the right). In that
> manner we'll be able to add a link to it from the Lucene plugin. It
> would be nice if you could put a screenshot of the result on the
> Code Snippet page so that users can see how it looks and decide if
> they want to use your snippet. WDYT?
4) You can remove the hardcoding by getting the icons from the
current page using:
$doc.getAttachmentURL("16-star-hot.png")
Then users will simply need to attach the icons to this search page.
Thanks
-Vincent
>
> Thanks a lot
> -Vincent
>
> On Apr 19, 2007, at 9:12 AM, Michael Guntli wrote:
>
>>
>> With RC1 lucene seems to work again, so i have costumized the
>> existing search
>> form from jkraemer
>> (http://www.jkraemer.net/static/maven/xwiki/plugins/lucene-plugin/
>> install.html)
>>
>> But keep attention: it's just a quick&dirty example to display the
>> results
>> in a table ;-)
>> As im not very familiar with velocity, the code is quite ugly!
>> (for example
>> i didn't find a while loop to output the number of stars for score-
>> quality,
>> so i did it with if, if, if..)
>>
>> it still has some bugs:
>> * if you search for a regular expression (e.g. win*), then the
>> query for the
>> next page will be win</strong>
>> * non wiki-documents and non-attachments will be hidden from the
>> results, so
>> it could happen that you see an empty page with a link to the next
>> results
>> (that's because searchresults.hitcount returns all results, also
>> the hidden
>> ones..)
>> * many more..
>> * icons are hard-coded.. (/skins/lgs/*.png)
>>
>> You can get the icons for free from famfamfam:
>> http://www.famfamfam.com/lab/icons/silk/
>>
>> ---------------------------
>> Searchform.vm:
>> 1 Search
>> #set($query = $request.getParameter("text"))
>> #if(!$query)
>> #set($query = "")
>> #end
>> #warning("This is the new lucene search engine.\\
>> If you experience any problems, try to use the default xwiki
>> [Search>WebSearch?text=$query]..")
>> #set($itemsPerPage = "30")
>> #set($doRebuild = $request.getParameter("rebuild"))
>> #if($doRebuild=="yes")
>> #set($lucene = $xwiki.getPlugin("lucene"))
>> #if($lucene)
>> #set($documentCount = $lucene.rebuildIndex($xwiki,$context))
>> #if(${documentCount}>=0)
>> Started index rebuild with $documentCount documents. Will take
>> some time
>> depending on the number of pages/attachments.
>> #else
>> Index rebuild failed.
>> #end
>> #end
>> #else
>> #if($xwiki.hasAdminRights())
>> [rebuild Index>${doc.web}.${doc.name}?rebuild=yes]
>> #end
>> #end
>>
>> {pre}
>> <form action="$doc.name" method="post">
>> <input type="text" name="text" value="$query" />
>> <input type="submit" value="Search"/>
>> </form>
>> {/pre}
>>
>> #if($query != "")
>> #set($lucene = $xwiki.getPlugin("lucene"))
>> #if($lucene)
>> #set($wikinames = "xwiki")
>> #set($languages = "default,en,de")
>> #set($firstIndex = $request.getParameter("firstIndex"))
>> #if(!$firstIndex)
>> #set($firstIndex = "1")
>> #end
>> #set($searchresults = $lucene.getSearchResults($query, $wikinames,
>> $languages, $xwiki))
>> #set($results = $searchresults.getResults($firstIndex,
>> $itemsPerPage))
>> #if($results.size()>0)
>> #set($lastIndex=$searchresults.getEndIndex($firstIndex,
>> $itemsPerPage))
>> #if($searchresults.hitcount==1)
>> ##{pre} $msg.get("oneresult"):{/pre}
>> #else
>> ##{pre}$msg.get("results") $firstIndex - $lastIndex $msg.get
>> ("of")
>> ${searchresults.hitcount}:{/pre}
>>
>> #if($searchresults.hasPrevious($firstIndex))
>> [previous
>> page>${doc.web}.${doc.name}?text=$query&firstIndex=
>> $searchresults.getPreviousIndex($firstIndex,$itemsPerPage)]
>> #end
>> #if($searchresults.hasNext($firstIndex,$itemsPerPage))
>> [next
>> page>${doc.web}.${doc.name}?text=$query&firstIndex=
>> $searchresults.getNextIndex($firstIndex,$itemsPerPage)]
>> #end
>> #end
>>
>> <table width="100%" class="grid" cellSpacing=0 cellpadding="5"
>> border="1">
>> <tr>
>> <th>Result</th>
>> <th width="100">Date</th>
>> <th width="150">Last Author</th>
>> <th width="100">Score</th>
>> </tr>
>> #foreach($result in $results)
>> #if($result.type=='wikipage')
>> <tr>
>> #if($xwiki.isVirtual())
>> <td align=left>[${result.wiki}:${result.web}.${result.name}]</
>> td>
>> #else
>> <td align=left>[${result.web}.${result.name}]</td>
>> #end
>> <td>$xwiki.formatDate($result.date, "d. MMM yyyy")</td>
>> <td>$xwiki.getUserName($result.author)</td>
>> <td>
>> #set($resval=$result.score*100)
>> #if($resval>10)
>> /xwiki/skins/lgs/16-star-hot.png
>> #end
>> #if($resval>25)
>> /xwiki/skins/lgs/16-star-hot.png
>> #end
>> #if($resval>50)
>> /xwiki/skins/lgs/16-star-hot.png
>> #end
>> #if($resval>70)
>> /xwiki/skins/lgs/16-star-hot.png
>> #end
>> #if($resval>90)
>> /xwiki/skins/lgs/16-star-hot.png
>> #end
>> ${resval}%
>> </td>
>> </tr>
>> #elseif($result.type=='attachment')
>> <tr>
>> <td align=left> ${result.url} /xwiki/skins/lgs/disk.png
>> ${result.filename} \\
>> Attachment of [${result.web}.${result.name}]</td>
>> <td>$xwiki.formatDate($result.date, "d. MMM yyyy")</td>
>> <td>$xwiki.getUserName($result.author)</td>
>> <td>
>> #set($resval=$result.score*100)
>> #if($resval>10)
>> /xwiki/skins/lgs/16-star-hot.png
>> #end
>> #if($resval>25)
>> /xwiki/skins/lgs/16-star-hot.png
>> #end
>> #if($resval>50)
>> /xwiki/skins/lgs/16-star-hot.png
>> #end
>> #if($resval>70)
>> /xwiki/skins/lgs/16-star-hot.png
>> #end
>> #if($resval>90)
>> /xwiki/skins/lgs/16-star-hot.png
>> #end
>> ${resval}%
>> </td>
>> </tr>
>> #end
>> </tr>
>> #end
>> #else
>> $msg.get("noresults")
>> #end
>> </table>
>> \\
>> #else
>> lucene plugin not found
>> #end
>> #end
>
More information about the devs
mailing list