Changeset 1190
- Timestamp:
- 07/04/10 10:50:08 (3 years ago)
- Location:
- solr
- Files:
-
- 10 added
- 8 modified
-
de.xml (modified) (1 diff)
-
en.xml (modified) (1 diff)
-
files/icon (added)
-
files/icon/solrL.png (added)
-
files/icon/solrM.png (added)
-
files/icon/solrS.png (added)
-
files/images (added)
-
files/images/lucene.png (added)
-
files/images/nutch.png (added)
-
files/images/solr.png (added)
-
files/lib/data/solr/SolrSearch.class.php (modified) (2 diffs)
-
files/lib/data/solr/SolrSearchResult.class.php (modified) (2 diffs)
-
files/lib/page/SolrSearchPage.class.php (modified) (4 diffs)
-
package.xml (modified) (1 diff)
-
schema.xml (added)
-
smt.xml (modified) (1 diff)
-
templates/searchResultSolr.tpl (modified) (2 diffs)
-
templates/solr.tpl (added)
Legend:
- Unmodified
- Added
- Removed
-
solr/de.xml
r1183 r1190 4 4 <category name="wcf.acp.option"> 5 5 <item name="wcf.acp.option.solr_url"><![CDATA[Solr]]></item> 6 <item name="wcf.acp.option.solr_url.description"><![CDATA[Zum Beispiel http://solr.dein-server.de:80/solr/nutch/]]></item> 6 <item name="wcf.acp.option.solr_url.description"><![CDATA[Zum Beispiel http://www.dein-server.de:80/solr/]]></item> 7 </category> 8 <category name="wcf.header.menu"> 9 <item name="wcf.header.menu.user.solr"><![CDATA[Suche]]></item> 10 </category> 11 12 <!-- admin: menu --> 13 <category name="wcf.acp.menu"> 14 <item name="wcf.acp.menu.link.solr"><![CDATA[Suchserver]]></item> 15 <item name="wcf.acp.menu.link.solr.index"><![CDATA[Index]]></item> 16 </category> 17 18 <category name="wcf.acp.solr"> 19 <item name="wcf.acp.solr"><![CDATA[Solr]]></item> 7 20 </category> 8 21 </language> -
solr/en.xml
r1183 r1190 4 4 <category name="wcf.acp.option"> 5 5 <item name="wcf.acp.option.solr_url"><![CDATA[Solr]]></item> 6 <item name="wcf.acp.option.solr_url.description"><![CDATA[e.g. http://solr.your-server.com:80/solr/nutch/]]></item> 6 <item name="wcf.acp.option.solr_url.description"><![CDATA[e.g. http://www.your-server.com:80/solr/]]></item> 7 </category> 8 <category name="wcf.header.menu"> 9 <item name="wcf.header.menu.user.solr"><![CDATA[Search]]></item> 10 </category> 11 12 <!-- admin: menu --> 13 <category name="wcf.acp.menu"> 14 <item name="wcf.acp.menu.link.solr"><![CDATA[Searchserver]]></item> 15 <item name="wcf.acp.menu.link.solr.index"><![CDATA[Index]]></item> 16 </category> 17 18 <category name="wcf.acp.solr"> 19 <item name="wcf.acp.solr"><![CDATA[Solr]]></item> 7 20 </category> 8 21 </language> -
solr/files/lib/data/solr/SolrSearch.class.php
r1183 r1190 2 2 // wcf imports 3 3 require_once(WCF_DIR.'lib/data/message/search/AbstractSearchableMessageType.class.php'); 4 require_once(WCF_DIR.'lib/data/ contest/ContestSearchResult.class.php');4 require_once(WCF_DIR.'lib/data/solr/SolrSearchResult.class.php'); 5 5 6 6 /** … … 24 24 */ 25 25 public function cacheMessageData($messageIDs, $additionalData = null) { 26 $this->messageCache = $additionalData; 26 if(is_array($additionalData)) { 27 foreach($additionalData as $row) { 28 $entry = new SolrSearchResult($row); 29 if($entry->isViewable()) { 30 $this->messageCache[$row['messageID']] = $row; 31 $this->messageCache[$row['messageID']]['message'] = $entry; 32 } 33 } 34 } 27 35 } 28 36 -
solr/files/lib/data/solr/SolrSearchResult.class.php
r1183 r1190 10 10 * @package de.easy-coding.wcf.solr 11 11 */ 12 class ContestSearchResult extends DatabaseObject { 13 14 /** 15 * Returns the formatted message. 16 * 17 * @return string 18 */ 19 public function getFormattedMessage() { 20 require_once(WCF_DIR.'lib/data/message/bbcode/MessageParser.class.php'); 21 MessageParser::getInstance()->setOutputType('text/html'); 22 return MessageParser::getInstance()->parse($this->message, $enableSmilies = true, $enableHtml = false, $enableBBCodes = true); 12 class SolrSearchResult extends DatabaseObject { 13 14 public function isViewable() { 15 return true; 23 16 } 24 17 … … 27 20 */ 28 21 public function getFormattedMessage() { 29 return SearchResultTextParser::parse(parent::getFormattedMessage()); 22 require_once(WCF_DIR.'lib/data/message/bbcode/MessageParser.class.php'); 23 MessageParser::getInstance()->setOutputType('text/html'); 24 $message = MessageParser::getInstance()->parse($this->message, $enableSmilies = true, $enableHtml = true, $enableBBCodes = true); 25 26 return SearchResultTextParser::parse($message); 30 27 } 31 28 } -
solr/files/lib/page/SolrSearchPage.class.php
r1183 r1190 9 9 */ 10 10 class SolrSearchPage extends SearchResultPage { 11 public $templateName = 'solr'; 11 12 protected $total = 0; 12 13 … … 24 25 * @return string 25 26 */ 26 protected staticfunction convertSingleWhitespace($string) {27 protected function convertSingleWhitespace($string) { 27 28 $string = str_replace(array("\t", " ", "\r", "\n", "-", urldecode("%C2%A0")), " ", $string); 28 29 while(strpos($string, ' ') !== false) { … … 31 32 return $string; 32 33 } 34 35 /** 36 * if the client is (or claims to be) connected via HTTPS 37 * @return boolean 38 */ 39 protected function isHTTPS() { 40 return isset($_SERVER["HTTP_X_PROTO"]) || 41 (isset($_SERVER['HTTPS']) && 42 !empty($_SERVER['HTTPS']) && 43 $_SERVER['HTTPS'] !== 'off'); 44 } 33 45 34 46 /** … … 36 48 */ 37 49 protected function readSearch() { 50 51 // seo friendly redirect of page 1 52 if(isset($_GET['pageNo']) && $_GET['pageNo'] == 1) { 53 $url = ($this->isHTTPS() ? 'https' : 'http').'://'.$_SERVER['HTTP_HOST'].str_replace("&pageNo=1", "", $_SERVER['REQUEST_URI']); 54 HeaderUtil::redirect($url, false, true); 55 exit; 56 } 57 58 // get search query 59 if (isset($_REQUEST['q'])) $this->query = $_REQUEST['q']; 60 61 if(!$this->query) { 62 return; 63 } 64 65 // param 66 $offset = (max($this->pageNo,1) - 1) * $this->itemsPerPage; 67 $i = $offset; 68 69 // query search 38 70 $solr = new SolrService(SOLR_URL); 39 40 $tmp = $solr->search($this->query, ($this->pageNo - 1) * $this->itemsPerPage, $this->itemsPerPage); 71 $tmp = $solr->search($this->query, $offset, $this->itemsPerPage); 41 72 $this->total = intval($tmp->response->numFound); 42 43 $i = 0; 44 foreach($tmp->highlighting as $row) { 45 73 74 if(!$tmp || !$tmp->highlighting) { 75 return; 76 } 77 78 // transform data in wcf compatible format 79 foreach($tmp->highlighting as $url => $row) { 80 // press first dimension of stdobject into clean array 81 $data = array(); 82 $data['messageID'] = $i; 83 $data['message'] = $this->convertSingleWhitespace($row->content[0]); 84 $data['subject'] = $row->title[0]; 85 $data['url'] = $url; 86 $data['displayurl'] = $row->url[0]; 87 $data['image'] = 'http://image.browsershots.de/'.parse_url($data['url'], PHP_URL_HOST); 88 $data['time'] = time(); // TODO: time 89 $data['messageType'] = 'solr'; 90 $data['type'] = 'solr'; 91 46 92 // set solr defaults 47 if( empty($row->messageType)) {48 $ row->messageType = 'solr';93 if(!empty($row->messageType)) { 94 $data['messageType'] = $row->messageType; 49 95 } 50 if( empty($row->messageID)) {51 $ row->messageID = $i;96 if(!empty($row->type)) { 97 $data['type'] = $row->type; 52 98 } 53 99 if(!empty($row->messageID)) { 100 $data['messageID'] = $row->messageID; 101 } 102 54 103 // increment message key position 55 $this->result[$i++] = $ row;104 $this->result[$i++] = $data; 56 105 } 57 106 } -
solr/package.xml
r1185 r1190 34 34 <pagemenu>pagemenu.xml</pagemenu> 35 35 <pagelocation>pagelocation.xml</pagelocation> 36 <searchablemessagetypes>smt.xml</searchablemessagetypes> 36 37 37 38 <!-- languages --> -
solr/smt.xml
r1183 r1190 3 3 <data> 4 4 <import> 5 <smt name=" contestEntry">5 <smt name="solr"> 6 6 <classpath>lib/data/solr/SolrSearch.class.php</classpath> 7 7 </smt> -
solr/templates/searchResultSolr.tpl
r1183 r1190 1 <div class="message content ">1 <div class="message content solr"> 2 2 <div class="messageInner container-{cycle name='results' values='1,2'}"> 3 3 <div class="messageHeader"> 4 4 <div class="containerIcon"> 5 < a href="index.php?page=Contest&contestID={@$item.message->contestID}&highlight={$query|urlencode}{@SID_ARG_2ND}"><img src="{icon}contestM.png{/icon}" alt="" /></a>5 <img src="{$item.message->image}" alt="" /> 6 6 </div> 7 7 <div class="containerContent"> 8 <p class="light smallFont">{@$item.message->time|time}</p> 9 <p class="light smallFont">{lang}wcf.contest.by{/lang} <a href="index.php?page=User&userID={@$item.message->userID}{@SID_ARG_2ND}">{$item.message->username}</a></p> 8 <h3><a href="{$item.message->url}{@SID_ARG_2ND}">{@$item.message->subject}</a></h3> 10 9 </div> 11 10 </div> 12 13 <h3><a href="index.php?page=Contest&contestID={@$item.message->contestID}&highlight={$query|urlencode}{@SID_ARG_2ND}">{$item.message->subject}</a></h3>14 11 15 12 <div class="messageBody"> … … 18 15 19 16 <div class="messageFooter"> 20 <div class="smallButtons"> 21 <ul> 22 <li class="extraButton"><a href="#top" title="{lang}wcf.global.scrollUp{/lang}"><img src="{icon}upS.png{/icon}" alt="" /> <span class="hidden">{lang}wcf.global.scrollUp{/lang}</span></a></li> 23 </ul> 24 </div> 17 <a href="{$item.message->url}" class="externalURL">{@$item.message->displayurl}</a> 25 18 </div> 26 19 <hr />
