[Solr] 數值的搜尋 integer index
patch: http://drupal.org/node/949768
問題主要出現在沒有 integer 的 filters
例如 integer checkbox, 沒有辦法可以像 text select dropdown refine 搜尋結果
而這個patch 可以修正, 令 widget 為 checkbox, checkboxes, dropdown 的 Integer/Float 可以有一個獨立的block 來收緊搜尋的結果
客製輸出 views 的多個值欄位 (theming view field with multiple values)
Theme developer 顯示, theme_content_view_multiple_field() 決定多個值的時候 views 的輸出,
源碼:
<?php
function theme_content_view_multiple_field($items, $field, $values) {
$output = '';
foreach ($items as $item) {
if (!empty($item) || $item == '0') {
$output .= '<div class="field-item">'. $item .'</div>';
}
}
return $output;
}
?>
自定成用逗號分隔, 例如 value1, value2, value3
theme 內的 template.php:
<?php
function theme_content_view_multiple_field($items, $field, $values) {
$output = '';
foreach ($items as $item) {
if (!empty($item) || $item == '0') {
$output .= ($item==end($items))? $item:$item.', ';
}
}
return $output;
}
?>
[2012-12-21] 續 apache solr (二)
我測試的 apachesolr module 是 6.x-2.0-beta3
我發覺站內的內容並不是即時更新到 solr 的 index 之內的
應該是有以下的步驟:
- 新建/修改的 node 會在 Drupal 內部先整理好, 再一次送到 solr, 可選立即送, 而admin page 有一個數字顯示目前未被送出之 node 的數目
- Solr 收到更新名單, 但仍需要時間建立 index, 已建立的數字可以在 admin page 看到, 但 index 的更新不可以手動發動, 要等, 或者重啟 solr
暫時未看到有 patch core 的需要, 但我只測試英文內容, 不知道有否關連
[2010-12-14] 初探 apache solr on Drupal
使用過 Drupal 內建的 search 的話
便會發覺這個功能是雞肋
的確是一個基於 tree 而不是 "SQL like" 的搜尋, 也是全文檢索
但就沒有辦法對搜尋結果加以 filter (faceted search)
也不可以用日期或者其他方式排序
Drupal 的開發者們都發覺言個問題
所以便導入了 Apache solr 這個專案了以達成更強大的搜尋功能
大家可以參考新版的 Drupal 官網的搜尋, 和 issue queue 作例子
當然, 社群自己重寫一個也不是不可以
但要做到和 Solr 同一高度倒不如整合還比較快和可靠
而缺點則是, Solr 是基於 java 技術的 (java 1.5 或以上)
也即是說你的伺服器未必支援....
如果你的伺服器不能讓你以 SSH 連接
你便很大機會不能使用了...
Drupal 的 Apache solr module 就是連結兩者的鑰匙
翻譯一下安裝文件 (2010-12-14 6.x-1.2 版本)
- 下載 Drupal Apache solr module
- 解壓到 sites/all/modules/
- 下載 Solr 的PHP 庫, 到 http://code.google.com/p/solr-php-client/downloads/list 下載 r22 的壓縮檔
- 解壓到 sites/all/modules/apachesolr/
- 下載 Solr, http://www.apache.org/dyn/closer.cgi/lucene/solr/
- 解壓到 htdocs 以外, 令apache 不能以 http 的方式訪問 solr
- 將 sites/all/modules/apachesolr/schema.xml 和 solrconfig.xml 抄到 Solr 的 example/solr/conf
- 啟用 Drupal Apache solr module
待續...
[inmediahk] 2010-12-06 頁面瀏覽資料統計(二)
啊, 說好的 "GA 最熱門 block" 要跳票了, 這星期... 太忙了, Freelance 纏身
先將部份的代碼分享上來, 讓大家研究一下
首先建立一個 url, 這個url 會跟據參數返回 GA 的結果
<?php
function ga_api_menu() {
$items = array();
$items['ga_api/ahah'] = array(
'title' => 'AHAH',
'page callback' => 'ga_api_ahah_callback',
'access callback' => TRUE,
);
return $items;
}?>
以下是查詢 GA 的代碼, 使用 ga:pi class, 只提取 pageview
<?php
function ga_api_ahah_callback() {
//使用一個新注冊, 唯讀的帳戶作提交要求
$ga = new gapi('username','password');
//讀取參數
$path = $_GET['d'];
//留一個機會使用緩存
//$results = cache_get('ga_api_'.$path);
if (empty($results)) {
$filter = 'pagepath=='.$path;
$start_date = date('Y-m',strtotime('-1 Year')).'-01';
$end_date = date('Y-m-d');
try{
$ga->requestReportData(8930156,array('pageTitle','month','year'),array('pageviews'),array('year','month'),$filter,$start_date,$end_date);
} catch( Exception $e) {
print drupal_json(array('status' => TRUE, 'data' => $e->getMessage()));
exit();
}
$results = $ga->getResults();
//cache_set('ga_api_'.$path, $results,'cache',date('U',strtotime("+1 day")));
}
//kprint_r($results);
$output = '';
//輸出 json
foreach($results as $id => $result)
{
$output .= '<div>';
//$datetime = DateTime::createFromFormat('m',$result->getMonth());
$output .= $result->getYear().'-'.$result->getMonth() . ': ';
$output .= 'PV'.$result->getPageviews();
$output .= ' ('.mb_substr ($result->getPagetitle(),0,7).'...)';
$output .= '</div>';
}
print drupal_json(array('status' => TRUE, 'data' => $output));
exit();
}?>
以上的代碼都先使用 GA 的 console 試試存取, 再變成使用 class 的代碼, 而 GA export 的文件和例子都很全面, 中英文都一樣完整, 值得一讚