General Actions:
Log-in
Register
Wiki:
Main wiki
▼
:
Document Index
»
Space:
Main
▼
:
Document Index
»
Page:
LuceneSearch
Search
en
Page Actions:
Export
▼
:
Export as PDF
Export as RTF
Export as HTML
More actions
▼
:
Print preview
View Source
Main wiki
»
Search
»
Lucene Search
Wiki source code of
Lucene Search
Last modified by
Administrator
on 2012/03/21 17:40
Content
·
Comments
(0)
·
Annotations
(0)
·
Attachments
(0)
·
History
·
Information
Hide line numbers
1: {{velocity}} 2: $xwiki.ssfx.use("uicomponents/search/search.css", true)## 3: ## Disable the document extra data: comments, attachments, history... 4: #set($docextras = []) 5: ## =================== 6: ## Lucene search 7: ## =================== 8: ## Inputs : $request.text 9: ## Outputs : $list, $isScored 10: ## =================== 11: ## Uncomment this line to overload the maximum list of wiki where to search (also the one listed in the wikis combobox) 12: ## #set($allwikinamelist = ["xwiki", "wiki1", "wiki2"]) 13: ## 14: ## Uncomment this line to overload the wikis where to search 15: ## #set($wikinames = "xwiki,wiki,wiki") 16: ## 17: ## Uncomment this line to overload the languages to search 18: ## #set($languages = "default,en,de") 19: #set ($rssmode = ("$!request.xpage" == 'plain')) 20: ## --------------- 21: ## Space filtering 22: ## --------------- 23: #set($extraClause = '') 24: #set($spaces = $xwiki.spaces) 25: #set($selectedSpace = "$!request.space") 26: #if($selectedSpace != '' && !$blacklistedSpaces.contains($selectedSpace)) 27: #set($extraClause = " AND space:${selectedSpace}") 28: #end 29: ## ---------------------------------------------------------------------- 30: ## Exclude Blacklisted spaces ($blacklistedSpaces is set in xwikivars.vm) 31: ## Also exclude WebPreferences. 32: ## ---------------------------------------------------------------------- 33: #foreach ($blacklistedSpace in $blacklistedSpaces) 34: #set ($extraClause = " AND NOT space:${blacklistedSpace}${extraClause}") 35: #end 36: #if(!$hasAdmin && !$isAdvancedUser) 37: #set ($extraClause = " AND NOT name:WebPreferences${extraClause}") 38: #end 39: ## --------------- 40: ## Space macros 41: ## --------------- 42: #macro(spaceoption $space $selectedSpace) 43: <option value="${space}" #if($selectedSpace == $space)selected="selected"#end>$space</option> 44: #end 45: #macro(spaceselect $selectedSpace $spaces) 46: <select name="space" title="$msg.get('search.page.bar.spaces.title')"> 47: <option value="" #if($selectedSpace == '')selected="selected"#end>$msg.get('search.page.bar.spaces.all')</option> 48: #foreach($space in $spaces) 49: #if (!$blacklistedSpaces.contains($space) && $xwiki.hasAccessLevel('view', "${space}.DocumentReservedForInternalXWikiUsage${mathtool.random(0, 999)}")) 50: #spaceoption($space $selectedSpace) 51: #end 52: #end 53: </select> 54: #end 55: ## --------------- 56: ## Wikis filtering 57: ## --------------- 58: ## Parse provided wikis 59: #set($wikinamelist = []) 60: #if (!$wikinames) 61: #set($wikinametable = $request.getParameterValues("wikinames")) 62: #if (!$wikinametable || $request.wikinames == "") 63: #set($wikinametable = $allwikinamelist) 64: #end 65: #set($wikinames = '') 66: #foreach($wikiname in $wikinametable) 67: #set($ok = $wikinamelist.add($wikiname)) 68: #if($wikinames != "") 69: #set($wikinames = $wikinames + ",") 70: #end 71: #set($wikinames = $wikinames + $wikiname) 72: #end 73: #if (!$xcontext.isMainWiki() && $wikinames == '') 74: #set($wikinames = $xcontext.database) 75: #end 76: #else 77: #set($wikinametable = $wikinames.split(", ")) 78: #foreach($wikiname in $wikinametable) 79: #set($ok = $wikinamelist.add($wikiname)) 80: #end 81: #end 82: ## 83: #if($xwiki.isVirtualMode() && $xcontext.isMainWiki()) 84: #if(!$allwikinamelist) 85: #set($currentwikiname = $xcontext.database) 86: ## TODO: add and use a public API method to get the list of wikis instead of doing it "by hand" 87: #set($allwikilist = $xwiki.searchDocuments(", BaseObject as obj, StringProperty as prop where doc.fullName=obj.name and doc.fullName<>'XWiki.XWikiServerClassTemplate' and obj.className='XWiki.XWikiServerClass' and prop.id.id=obj.id and prop.id.name='server'")) 88: ## 89: #set($allwikinamelist = []) 90: #foreach($wiki in $allwikilist) 91: #set($ok = $allwikinamelist.add($wiki.substring(17).toLowerCase())) 92: #end 93: ## Make sure the main wiki is part of the list 94: #if(!$allwikinamelist.contains($xcontext.mainWikiName)) 95: #set($ok = $allwikinamelist.add($xcontext.mainWikiName)) 96: #end 97: #end 98: ## --------------- 99: ## Wikis macros 100: ## --------------- 101: #macro(wikioption $wikiname $wikinamelist) 102: <option value="$wikiname" #if($wikinamelist.contains($wikiname))selected="selected"#end>$wikiname</option> 103: #end 104: #macro(wikisselect $wikinamelist $allwikinamelist) 105: ## TODO: find a scaling way to handle wikis multiselect, does not use multiple="multiple" for now because it does not looks nice 106: <select name="wikinames"> 107: <option value="" selected="selected">$msg.get('search.page.bar.wikis.all')</option> 108: #foreach($wikiname in $allwikinamelist) 109: #wikioption($wikiname $wikinamelist) 110: #end 111: </select> 112: #end 113: #else 114: #if($wikinames == '') 115: #set($wikinames = $xcontext.mainWikiName) 116: #end 117: #end 118: ## --------------- 119: ## Query preparation 120: ## --------------- 121: #set($text = "$!request.getParameter('text')") 122: #set($query = $text) 123: #set($utext = $util.encodeURI($query)) 124: #set($defaultItemsPerPage = 30) 125: #set($itemsPerPage = $util.parseInt("$!{request.perPage}")) 126: #if($itemsPerPage <= 0) 127: #set($itemsPerPage = $defaultItemsPerPage) 128: #end 129: ## --------------- 130: ## Query form 131: ## --------------- 132: #if(!$rssmode) 133: {{html}} 134: <form action="" id="searchBar"> 135: <div class="centered"> 136: <label for="text" class="hidden">$msg.get('search.page.query.label')</label> 137: <input type="text" id="text" name="text" class="searchQuery #if($text == '') withTip#end" #if($text == '') value="$msg.get('search.page.bar.query.tip')" #else value="${escapetool.xml($text)}" #end title="$msg.get('search.page.bar.query.title')"/> 138: #if ($xwiki.isVirtualMode() && $xcontext.isMainWiki()) 139: #wikisselect($request.wikinames $allwikinamelist) 140: #end 141: #spaceselect($selectedSpace $spaces) 142: <span class='buttonwrapper'> 143: <input type="submit" class="button searchButton" value="$msg.get('search.page.bar.submit')" title="$msg.get('search.page.bar.submit.title')"/> 144: </span> 145: <div class="searchHelp">$msg.get('search.page.bar.querytip')</div> 146: </div> 147: </form> 148: {{/html}} 149: #end 150: ## --------------- 151: ## Results processing 152: ## --------------- 153: #if($query != '') 154: #set($lucene = $xwiki.getPlugin("lucene")) 155: #if($lucene) 156: ## --------------- 157: ## Lucene search 158: ## --------------- 159: #set($searchresults = $lucene.getSearchResults("${query}${extraClause}", '', $wikinames, $!languages)) 160: #if($searchresults && $searchresults.getHitcount() > 0) 161: ## ----------------- 162: ## Pagination (top) 163: ## ----------------- 164: #if(!$rssmode) 165: #set($paginationParameters = {'url' : $doc.getURL('view', "text=${escapetool.url($query)}&space=${escapetool.url($selectedSpace)}"), 'totalItems' : $searchresults.getHitcount(), 'defaultItemsPerPage' : $defaultItemsPerPage, 'position': 'top'}) 166: 167: {{html}} 168: #pagination($paginationParameters) 169: {{/html}} 170: #end 171: ## ----------------- 172: ## Display results 173: ## ----------------- 174: #set($firstIndex = "$!{paginationParameters.firstItem}") 175: #if($firstIndex == '') 176: #set($firstIndex = "$!request.getParameter('firstIndex')") 177: #if($firstIndex == '') 178: #set($firstIndex = '0') 179: #end 180: #end 181: #set($firstIndex = $util.parseInt($firstIndex)) 182: #set($firstIndex = $firstIndex + 1) 183: #set($results = $searchresults.getResults("$firstIndex", "$itemsPerPage")) 184: #if ($rssmode) 185: #set ($list = $util.arrayList) 186: #foreach ($item in $results) 187: #if ($item.type != "attachment") 188: #set ($ok = $list.add(0, "${item.space}.${item.name}")) 189: #end 190: #end 191: #set ($feed = $xwiki.feed.getDocumentFeed($list, $util.getHashMap())) 192: #set ($feedURI = $doc.getExternalURL("view")) 193: #set ($discard = $feed.setLink($feedURI)) 194: #set ($discard = $feed.setUri($feedURI)) 195: #set ($discard = $feed.setAuthor('XWiki')) 196: #set ($discard = $feed.setTitle($msg.get('search.rss', [$text]))) 197: #set ($discard = $feed.setDescription($msg.get('search.rss', [$text]))) 198: #set ($discard = $feed.setLanguage($xcontext.language)) 199: #set ($discard = $feed.setCopyright($xwiki.getXWikiPreference('copyright'))) 200: {{{$xwiki.feed.getFeedOutput($feed, 'rss_2.0')}}} 201: #else 202: #set ($list = $results) 203: #set ($isScored = true) 204: 205: {{include document="XWiki.Results"/}} 206: #end 207: ## ----------------- 208: ## Pagination (bottom) 209: ## ----------------- 210: #if(!$rssmode) 211: #set($paginationParameters.position = 'bottom') 212: 213: {{html}} 214: #pagination($paginationParameters) 215: {{/html}} 216: ## --------------- 217: ## RSS link 218: ## --------------- 219: #if($selectedSpace == '') 220: #set($rssURL = $xwiki.getURL($doc.fullName, 'view', "xpage=plain&text=${utext}" )) 221: #else 222: #set($rssURL = $xwiki.getURL($doc.fullName, 'view', "xpage=plain&space=${selectedSpace}&text=${utext}")) 223: #end 224: 225: {{html}} 226: <a href="${rssURL}" class='hasIcon iconRSS'>$msg.get("search.rss", ["[$escapetool.xml($query)]"])</a> 227: {{/html}} 228: #end 229: #end 230: #else 231: 232: {{error}}$msg.get('search.lucene.plugin.notfound'){{/error}} 233: #end 234: #end 235: #if (!$rssmode) 236: ## --------------- 237: ## Rebuild processing 238: ## --------------- 239: #set($lucene = $xwiki.getPlugin("lucene")) 240: #if($lucene) 241: ## --------------- 242: ## Queue 243: ## --------------- 244: #set ($queuesize = $xwiki.lucene.getQueueSize()) 245: #if ($queuesize > 0) 246: 247: {{info}}$msg.get('search.page.lucene.rebuilding', [${queuesize}]){{/info}} 248: #end 249: #end## lucene exists 250: #end## !$rssmode 251: {{/velocity}}