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