<?xml version="1.0" encoding="ISO-8859-1"?>

<xwikidoc>
<web>Main</web>
<name>LuceneSearch</name>
<language></language>
<defaultLanguage>en</defaultLanguage>
<translation>0</translation>
<parent>Main.WebSearch</parent>
<creator>XWiki.Admin</creator>
<author>XWiki.Admin</author>
<customClass></customClass>
<contentAuthor>XWiki.Admin</contentAuthor>
<creationDate>1186588178000</creationDate>
<date>1197046413000</date>
<contentUpdateDate>1197046413000</contentUpdateDate>
<version>24.1</version>
<title></title>
<template></template>
<defaultTemplate></defaultTemplate>
<validationScript></validationScript>
<comment></comment>
<minorEdit>false</minorEdit>
<attachment>
<filename>previous.png</filename>
<filesize>389</filesize>
<author>XWiki.Admin</author>
<date>1196849577000</date>
<version>1.4</version>
<comment></comment>
<content>iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAEXSURBVDjLY/j//z8DJZiBLgZkz37Ynjrz4ReyDEideb89afrDf5ET7v4n2YCEqXf7qpY9/T9r76v/Xu03STMgasLteaVLHv+fufvl/6k7X/y3qrlCvAHBvTeXFC54ANbctv7p/95Nz/5rFZ0nzoCAzpuPsuc++D91x4v/jasf/y9aeP9/89rH/6VTTxJngGPDtc3xU+/879789H/5kgf/02fd+V+17OF/yZhjxBmgVXCaRT3v7BqP1mv/a1Y+/J824/b/woX3/osHHSAtECVjjqy0Lb/wP2/+3f+Zs+/8F3XfS3o0inntXWSeffJ/0tRb/0Ucdv4nKyEJW25ZYBh/5L+w5fb/ZCdlQYMNs4WMt/wfuMyEDwMA0Irn/pDRT58AAAAASUVORK5CYII=</content>
</attachment>
<attachment>
<filename>next.png</filename>
<filesize>395</filesize>
<author>XWiki.Admin</author>
<date>1196849577000</date>
<version>1.4</version>
<comment></comment>
<content>iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAEdSURBVDjLY/j//z8DJZiB6gY0rH7xpW7li3YKDHj1v2bli38lix61k2VA5fJn/9eeeP+/fcOL/wlT7/aRbEDegkf/Vxx/93/xobf/S5c8/u/ecm0eSQYkTX/4f+HBN/8nbX/xf+bul/8Tp9/9r1N0dgnRBgT33QZqfPW/YdXj/42rH//v2vjkv3fHtf9SScceEWWAc8u1/xO2Pv9fsvjB//IlD4CGPPrvXH/5v2Tksc1EGWBaful/+/on/4sW3gfGxsP/9lUX/ksEH1gj6rqdhSgDlPPO/q9b8fB/5bIH/23LL/wXD9i7kqRAlEo6+b908f3/NiXn/4t57V1EcjRKRB75b1145r+o684FZCUkMb8D/0Uct88euMxEKgYA7Ojrv4CgE7EAAAAASUVORK5CYII=</content>
</attachment>
<object>
<class>
<name>XWiki.TagClass</name>
<customClass></customClass>
<customMapping></customMapping>
<defaultViewSheet></defaultViewSheet>
<defaultEditSheet></defaultEditSheet>
<defaultWeb></defaultWeb>
<nameField></nameField>
<validationScript></validationScript>
<tags>
<cache>0</cache>
<displayType>input</displayType>
<multiSelect>1</multiSelect>
<name>tags</name>
<number>1</number>
<prettyName>Tags</prettyName>
<relationalStorage>1</relationalStorage>
<separator> </separator>
<separators> ,|</separators>
<size>30</size>
<unmodifiable>0</unmodifiable>
<values></values>
<classType>com.xpn.xwiki.objects.classes.StaticListClass</classType>
</tags>
</class>
<name>Main.LuceneSearch</name>
<number>0</number>
<className>XWiki.TagClass</className>
<property>
<tags/>
</property>
</object>
<content>## ===================
## Lucene search
## ===================
## Inputs : $request.text
## Outputs : $list, $isScored
## ===================
## Uncomment this line to overload the maximum list of wiki where to search (also the one listed in the wikis combobox)
## #set($allwikinamelist = ["xwiki", "wiki1", "wiki2"])
##
## Uncomment this line to overload the wikis where to search
## #set($wikinames = "xwiki,wiki,wiki")
##
{pre}
#set ($displayUI = true)
#if ($request.xpage &amp;&amp; $request.xpage == "rdf")
  #set ($displayUI = false)
#end
## ---------------
## Title
## ---------------
#if ($displayUI)
{/pre}
1 Search
{pre}
#end
## ---------------
## Space filtering
## ---------------
#if($request.space &amp;&amp; $request.space != "")
  #set($space = $request.space)
  #set($reqspace = "AND web:${space}")
#else
  #set($space = "")
#end
#set($spacesText = {})
#set($spaces = $xwiki.spaces)
#set($ok = $spacesText.put("All",""))
#foreach($space in $spaces)
  #set($ok = $spacesText.put($space,$space))
#end
## ---------------
## Space macros
## ---------------
#macro(spaceoption $space $selectspace $spacesText)
  &lt;option value="$spacesText.get($space)" #if($selectspace == $spacesText.get($space))selected="selected"#end&gt;$space&lt;/option&gt;
#end
#macro(spaceselect $selectspace $spaces $spacesText)
  &lt;select name="space"&gt;
    #spaceoption("All" $selectspace $spacesText)
    #foreach($space in $spaces)
      #spaceoption($space $selectspace $spacesText)
    #end
  &lt;/select&gt;
#end
## ---------------
## Wikis filtering
## ---------------
#set($wikinamelist = [])
#if(!$wikinames)
  #set($wikinametable = $request.getParameterValues("wikinames"))
  #if(!$wikinametable || $request.wikinames == "")
    #set($wikinametable = $allwikinamelist)
  #end
  #set($wikinames = "")
  #foreach($wikiname in $wikinametable)
    #set($ok = $wikinamelist.add($wikiname))
    #if($wikinames != "")
      #set($wikinames = $wikinames + ",")
    #end
    #set($wikinames = $wikinames + $wikiname)
  #end
#else
  #set($wikinametable = $wikinames.split(", "))
  #foreach($wikiname in $wikinametable)
    #set($ok = $wikinamelist.add($wikiname))
  #end
#end
##
#if($xwiki.isVirtual())
  #if(!$allwikinamelist)
    #set($currentwikiname = $context.database)
    #set($ok = $context.setDatabase($context.mainWikiName))
    #set($allwikilist = $xwiki.searchDocuments(", BaseObject as obj, StringProperty as prop where doc.fullName=obj.name and obj.className='XWiki.XWikiServerClass' and prop.id.id=obj.id and prop.id.name='server'"))
    #set($ok = $context.setDatabase($currentwikiname))
    ##
    #set($allwikinamelist = [])
    #foreach($wiki in $allwikilist)
      #set($ok = $allwikinamelist.add($wiki.substring(17).toLowerCase()))
    #end
    #if(!$allwikinamelist.contains($context.mainWikiName))
      #set($ok = $allwikinamelist.add($context.mainWikiName))
    #end
  #end
  ## ---------------
  ## Wikis macros
  ## ---------------
  #macro(wikinamesoption $wikiname $wikinamelist)
    &lt;option value="$wikiname" #if($wikinamelist.contains($wikiname))selected="selected"#end&gt;$wikiname&lt;/option&gt;
  #end
  #macro(wikinamesselect $allwikinamelist $wikinamelist)
    &lt;select name="wikinames"&gt;
      &lt;option value="" selected="selected"&gt;All&lt;/option&gt;
      #foreach($wikiname in $allwikinamelist)
        #wikinamesoption($wikiname $wikinamelist)
      #end
    &lt;/select&gt;
  #end
#else
  #if($wikinames == "")
    #set($wikinames = $context.mainWikiName)
  #end
#end
## ---------------
## Query preparation
## ---------------
#set($text = $request.getParameter("text"))
#set($query = $text)
#if(!$query)
	#set($query = "")
#end
#set($itemsPerPage = "30")
## ---------------
## RSS link
## ---------------
#set($utext = $xwiki.getURLEncoded($query))
#if($space == "")
  #set($url = $xwiki.getURL($doc.fullName, "view", "xpage=rdf&amp;amp;text=${utext}" ))
#else
  #set($url = $xwiki.getURL($doc.fullName, "view", "xpage=rdf&amp;space=$space&amp;text=${utext}"))
#end
#if ($displayUI)
&lt;div style="float: right;"&gt;
  &lt;a href="$url"&gt;&lt;img src="$xwiki.getSkinFile("icons/black-rss.png")" style="border:0px" alt="rss icon" /&gt;&lt;/a&gt;
&lt;/div&gt;
## ---------------
## Query form
## ---------------
&lt;form action="$doc.name" method="get"&gt;
&lt;div class="centered"&gt;
Query &lt;input type="text" name="text" value="$query" /&gt; in space #spaceselect($space $spaces $spacesText)#if($xwiki.isVirtual()) in wikis #wikinamesselect($xwiki.sort($allwikinamelist) $wikinamelist)#end &lt;input type="submit" value="Search"/&gt;
&lt;/div&gt;
&lt;/form&gt;
#end
{/pre}
## ---------------
## Results processing
## ---------------
#if($query != "")
	#set($lucene = $xwiki.getPlugin("lucene"))
	#if($lucene)
                ## ---------------
                ## Lucene search
                ## ---------------
		#set($languages = "default,en,de")
		#set($firstIndex = $request.getParameter("firstIndex"))
		#if(!$firstIndex)
			#set($firstIndex = "1")
		#end
		#set($searchresults = $lucene.getSearchResults("${query}$!{reqspace}", $wikinames, $languages, $xwiki))
                #set($results = $searchresults.getResults($firstIndex,$itemsPerPage))
		#if($searchresults.getHitcount()&gt;0)
                        ## -----------------
                        ## Results numbers
                        ## -----------------
                        #set($lastIndex=$searchresults.getEndIndex($firstIndex, $itemsPerPage))
                        #if ($displayUI)
			#if($searchresults.getHitcount()==1)
				One result:
			#else
				Results $firstIndex - $lastIndex of ${searchresults.getHitcount()}:
			#end
                        #end
                        ## ---------------
                        ## Previous page
                        ## ---------------
			#if($searchresults.hasPrevious($firstIndex) &amp;&amp; $displayUI)
				#set($linkfirstIndex = $searchresults.getPreviousIndex($firstIndex,$itemsPerPage))
				#set($link = "${doc.name}?text=${query}&amp;firstIndex=${linkfirstIndex}")
                                {pre}
				&lt;a href="$link"&gt;&lt;img src="${doc.getAttachmentURL("previous.png")}" alt="previous" /&gt;previous page&lt;/a&gt;
				{/pre}
			#end		
                        ## -------------
                        ## Next page
                        ## -------------
			#if($searchresults.hasNext($firstIndex,$itemsPerPage) &amp;&amp; $displayUI)
				#set($linkfirstIndex = $searchresults.getNextIndex($firstIndex,$itemsPerPage))
				#set($link = "${doc.name}?text=${query}&amp;firstIndex=${linkfirstIndex}")
                                {pre}
				&lt;a href="$link"&gt;&lt;img src="${doc.getAttachmentURL("next.png")}" alt="next" /&gt;next page&lt;/a&gt;
                                {/pre}
			#end
                        ## -----------------
                        ## Display results
                        ## -----------------
                        #if ($request.xpage &amp;&amp; $request.xpage == "rdf")
                          #set ($baseurl = "http://${request.serverName}")
                          #set ($description = "RSS feed for search on '$text'")
                          #set ($list = $xwiki.arrayList)
                          #foreach ($item in $results)
                            #if ($item.type != "attachment")
                              #set ($ok = $list.add(0, "${item.web}.${item.name}"))
                            #end
                          #end
                          #set ($ok = $response.setContentType("text/xml"))
                          #includeInContext("XWiki.WebRssCode")
                        #else
                          #set ($list = $results)
                          #set ($isScored = true)
                          #includeInContext("XWiki.Results")
                        #end
                #end
	#else
		#error("Lucene plugin not found. Make sure it's defined in your xwiki.cfg file.")
	#end
#end
{pre}
#if ($displayUI)
## ---------------
## Rebuild processing
## ---------------
#set($lucene = $xwiki.getPlugin("lucene"))
#if($lucene)
#set($doRebuild = $request.getParameter("rebuild"))
#if($doRebuild)
  #if($doRebuild=="yes")
		#set($documentCount = $lucene.rebuildIndex())
		#if(${documentCount}&gt;=0)
			{/pre}#info("Started index rebuild with $documentCount documents.\\
                               Will take some time depending on the number of pages/attachments."){pre}
		#else
			#error("Index rebuild failed.")
		#end
  #end
#else
## ---------------
## Queue &amp; rebuild option
## ---------------
        #set ($queuesize = $xwiki.lucene.getQueueSize())
        #if ($queuesize &gt; 2)
            #set($info1 = "Lucene is currently building its index, ${queuesize} documents in queue.")
        #else
            #set($info1 = "Lucene index is up to date.")
        #end
        #if($xwiki.hasAdminRights())
            #set($info2 = " [Rebuild the Lucene index&gt;${doc.web}.${doc.name}?rebuild=yes].")
        #else
            #set($info2 = "")
	#end
        {/pre}#info("${info1}${info2}"){pre}
#end
#end
## ---------------
## Comment
## ---------------
{/pre}
#warning("This is the new experimental Lucene search engine. \\
        You can still use the XWiki [default search engine&gt;WebSearch?text=$query].")
{pre}
#end
{/pre}</content>
</xwikidoc>
