[釋出]phpBB 2.0.0 中文搜尋檔 2.1
版主: 版主管理群
那些變數都在 includes/constant.php裡定義了othree 寫: 恩恩\r
我想請問一下
他的 sql 語法的TABLE的名稱的對應在哪裡啊
像是這樣 [" . POSTS_TEXT_TABLE . "]
POSTS_TEXT_TABLE 是代表哪一個TABLE呢??
所以我找不到你所說的索引的 TABLE
不過確實感覺到有這東西(只找的到新 post 的文張)
我是 snitz 轉過來的
所以搜尋全滅
看來這個搞定還要去研究 post 了
不然這樣我可無法承受啊...
[php]<?php
// Table names
define('AUTH_ACCESS_TABLE', $table_prefix.'auth_access');
define('BANLIST_TABLE', $table_prefix.'banlist');
define('CATEGORIES_TABLE', $table_prefix.'categories');
define('CONFIG_TABLE', $table_prefix.'config');
define('DISALLOW_TABLE', $table_prefix.'disallow');
define('FORUMS_TABLE', $table_prefix.'forums');
define('GROUPS_TABLE', $table_prefix.'groups');
define('POSTS_TABLE', $table_prefix.'posts');
define('POSTS_TEXT_TABLE', $table_prefix.'posts_text');
define('PRIVMSGS_TABLE', $table_prefix.'privmsgs');
define('PRIVMSGS_TEXT_TABLE', $table_prefix.'privmsgs_text');
define('PRIVMSGS_IGNORE_TABLE', $table_prefix.'privmsgs_ignore');
define('PRUNE_TABLE', $table_prefix.'forum_prune');
define('RANKS_TABLE', $table_prefix.'ranks');
define('SEARCH_TABLE', $table_prefix.'search_results');
define('SEARCH_WORD_TABLE', $table_prefix.'search_wordlist');
define('SEARCH_MATCH_TABLE', $table_prefix.'search_wordmatch');
define('SESSIONS_TABLE', $table_prefix.'sessions');
define('SMILIES_TABLE', $table_prefix.'smilies');
define('THEMES_TABLE', $table_prefix.'themes');
define('THEMES_NAME_TABLE', $table_prefix.'themes_name');
define('TOPICS_TABLE', $table_prefix.'topics');
define('TOPICS_WATCH_TABLE', $table_prefix.'topics_watch');
define('USER_GROUP_TABLE', $table_prefix.'user_group');
define('USERS_TABLE', $table_prefix.'users');
define('WORDS_TABLE', $table_prefix.'words');
define('VOTE_DESC_TABLE', $table_prefix.'vote_desc');
define('VOTE_RESULTS_TABLE', $table_prefix.'vote_results');
define('VOTE_USERS_TABLE', $table_prefix.'vote_voters');
?>[/php]
他那個檔真的太長了.. 看的頭會昏, 不過你抓到重點了, 我當時可能是誤判\r
他所有INSERT的東作都是塞垃圾.. 所以把那些INSERT SEARCH... 的全刪\r
了^^".. 後來我又想過一次, 如果把所有 "," "." " "當作斷句的關鍵(可能再加一
些甚麼"的", "是")來切, 照著他們原本的邏輯, 中文應該也可以硬塞進去.. 不過
這又有另一個問題, 就是DB會爆增.. 真的是兩難@@".. 而且還要回過頭來處理
之前沒有index的文章...
OOHOO said:
有事Mail給我, 不要P我, 因為根本沒辦法P.
有事Mail給我, 不要P我, 因為根本沒辦法P.
我找到了我誤砍的那段了... 換頁問題修復
打開修改過的search.php
找\r
換成
存檔搞定
打開修改過的search.php
找\r
代碼: 選擇全部
unset($store_search_data);
}
//
// Look up data ...
//
代碼: 選擇全部
unset($store_search_data);
mt_srand ((double) microtime() * 1000000);
$search_id = mt_rand();
$sql = "UPDATE " . SEARCH_TABLE . "
SET search_id = $search_id, search_array = '$result_array'
WHERE session_id = '" . $userdata['session_id'] . "'";
if ( !($result = $db->sql_query($sql)) || !$db->sql_affectedrows() )
{
$sql = "INSERT INTO " . SEARCH_TABLE . " (search_id, session_id, search_array)
VALUES($search_id, '" . $userdata['session_id'] . "', '" . str_replace("\'", "''", $result_array) . "')";
if ( !($result = $db->sql_query($sql)) )
{
message_die(GENERAL_ERROR, 'Could not insert search results', '', __LINE__, __FILE__, $sql);
}
}
}
else
{
if ( intval($search_id) )
{
$sql = "SELECT search_array
FROM " . SEARCH_TABLE . "
WHERE search_id = $search_id
AND session_id = '". $userdata['session_id'] . "'";
if ( !($result = $db->sql_query($sql)) )
{
message_die(GENERAL_ERROR, 'Could not obtain search results', '', __LINE__, __FILE__, $sql);
}
if ( $row = $db->sql_fetchrow($result) )
{
$search_data = unserialize($row['search_array']);
for($i = 0; $i < count($store_vars); $i++)
{
$$store_vars[$i] = $search_data[$store_vars[$i]];
}
}
}
}
//
// Look up data ...
//
OOHOO said:
有事Mail給我, 不要P我, 因為根本沒辦法P.
有事Mail給我, 不要P我, 因為根本沒辦法P.
感謝OOHOO 寫: 那些變數都在 includes/constant.php裡定義了
[php]<?php
// Table names
define('AUTH_ACCESS_TABLE', $table_prefix.'auth_access');
define('BANLIST_TABLE', $table_prefix.'banlist');
define('CATEGORIES_TABLE', $table_prefix.'categories');
define('CONFIG_TABLE', $table_prefix.'config');
define('DISALLOW_TABLE', $table_prefix.'disallow');
define('FORUMS_TABLE', $table_prefix.'forums');
define('GROUPS_TABLE', $table_prefix.'groups');
define('POSTS_TABLE', $table_prefix.'posts');
define('POSTS_TEXT_TABLE', $table_prefix.'posts_text');
define('PRIVMSGS_TABLE', $table_prefix.'privmsgs');
define('PRIVMSGS_TEXT_TABLE', $table_prefix.'privmsgs_text');
define('PRIVMSGS_IGNORE_TABLE', $table_prefix.'privmsgs_ignore');
define('PRUNE_TABLE', $table_prefix.'forum_prune');
define('RANKS_TABLE', $table_prefix.'ranks');
define('SEARCH_TABLE', $table_prefix.'search_results');
define('SEARCH_WORD_TABLE', $table_prefix.'search_wordlist');
define('SEARCH_MATCH_TABLE', $table_prefix.'search_wordmatch');
define('SESSIONS_TABLE', $table_prefix.'sessions');
define('SMILIES_TABLE', $table_prefix.'smilies');
define('THEMES_TABLE', $table_prefix.'themes');
define('THEMES_NAME_TABLE', $table_prefix.'themes_name');
define('TOPICS_TABLE', $table_prefix.'topics');
define('TOPICS_WATCH_TABLE', $table_prefix.'topics_watch');
define('USER_GROUP_TABLE', $table_prefix.'user_group');
define('USERS_TABLE', $table_prefix.'users');
define('WORDS_TABLE', $table_prefix.'words');
define('VOTE_DESC_TABLE', $table_prefix.'vote_desc');
define('VOTE_RESULTS_TABLE', $table_prefix.'vote_results');
define('VOTE_USERS_TABLE', $table_prefix.'vote_voters');
?>[/php]
他那個檔真的太長了.. 看的頭會昏, 不過你抓到重點了, 我當時可能是誤判\r
他所有INSERT的東作都是塞垃圾.. 所以把那些INSERT SEARCH... 的全刪\r
了^^".. 後來我又想過一次, 如果把所有 "," "." " "當作斷句的關鍵(可能再加一
些甚麼"的", "是")來切, 照著他們原本的邏輯, 中文應該也可以硬塞進去.. 不過
這又有另一個問題, 就是DB會爆增.. 真的是兩難@@".. 而且還要回過頭來處理
之前沒有index的文章...
照這樣看來
[phpbb_search_wordlist],[phpbb_search_wordmatch]
這兩個TABLE就是索引
不過很奇怪的是\r
我先新增一篇標題和內文都是 DVD 的文章
在用原本的 search.php 來搜尋 DVD 這個關鍵字
結果只出現我新增的這篇
看起來很合理
可是我在[phpbb_search_wordlist]裡卻找不到DVD這個字...
讓我百思不解啊.....
我又烏龍了=_=, 還有一段更重要的沒加回去.. 刪無用資料的那段
找\r
在上面插入\r
歹勢歹勢...^^"
找\r
代碼: 選擇全部
//
// Store new result data
//
代碼: 選擇全部
//
// Finish building query (for all combinations)
// and run it ...
//
$sql = "SELECT session_id
FROM " . SESSIONS_TABLE;
if ( $result = $db->sql_query($sql) )
{
$delete_search_ids = array();
while( $row = $db->sql_fetchrow($result) )
{
$delete_search_ids[] = "'" . $row['session_id'] . "'";
}
if ( count($delete_search_ids) )
{
$sql = "DELETE FROM " . SEARCH_TABLE . "
WHERE session_id NOT IN (" . implode(", ", $delete_search_ids) . ")";
if ( !$result = $db->sql_query($sql) )
{
message_die(GENERAL_ERROR, 'Could not delete old search id sessions', '', __LINE__, __FILE__, $sql);
}
}
}
OOHOO said:
有事Mail給我, 不要P我, 因為根本沒辦法P.
有事Mail給我, 不要P我, 因為根本沒辦法P.
嗯.. 搞定.. 好爽chihsun 寫:試試小弟的方法!
Line 276
[php]<?php
$match_word = ( !is_integer(strpos($split_search[$i], '*')) ? '%' . $split_search[$i] . '%' : str_replace("*", "%", $split_search[$i]) );
?>[/php]
改成
[php]<?php
$match_word = "%" . str_replace("*", "", $split_search[$i]) . "%";
$match_word = addslashes($match_word);
?>[/php]
這樣子就可以直接做"屁股會長尾巴的字"的搜尋了!
我把那兩句合在一起\r
代碼: 選擇全部
$match_word = addslashes("%" . str_replace("*", "", $split_search[$i]) . "%");
給你加500
^^".. 今天下載過的人又要再抓一次了^^"... soli
OOHOO said:
有事Mail給我, 不要P我, 因為根本沒辦法P.
有事Mail給我, 不要P我, 因為根本沒辦法P.
只不過這個解決搜尋的辦法還是只能"全文搜索"
如果你的論壇太大!那就期望您的主機夠力…\r
不然如果很多人同時搜尋就累了
至於為什麼要把"*"都弄掉並且前後都加上"%"
個人的想法是因為中文字根本沒有用空白字元做分隔
也就是每個字都是連在一起的!所以系統可能會將這樣的"中文"都當成一個字來看
所以只加一邊%還是沒辦法正確搜尋到!那就乾脆給他兩邊都來吧
此外,那個加上反斜線的問題可能還是正體中文的弱點…有時只能強迫加上或去掉才能成功:)
上面這個版本是小弟在第一次收到這裡釋出的中文搜尋檔時,加上站長提供的訊息"要加上\才能搜尋許"所以參考站長釋出的版本modify了一下…\r
當時看站長的搜尋檔還一直覺得為什麼要把session處的那兩段給砍掉@_@
後來我自己的測試站上就試試不要砍(理由是那時沒時間去看那一段,只看了一下發覺根本沒有關於處理搜尋字串的部分!想說應該不砍應該沒有影響!
後來就看到有人回覆說沒辦法跳頁!再看了一下就覺得應該是這兩段的問題了!
接下來把中文字串放入index的工作就讓其他高人來努力了@_@
如果你的論壇太大!那就期望您的主機夠力…\r
不然如果很多人同時搜尋就累了
至於為什麼要把"*"都弄掉並且前後都加上"%"
個人的想法是因為中文字根本沒有用空白字元做分隔
也就是每個字都是連在一起的!所以系統可能會將這樣的"中文"都當成一個字來看
所以只加一邊%還是沒辦法正確搜尋到!那就乾脆給他兩邊都來吧
此外,那個加上反斜線的問題可能還是正體中文的弱點…有時只能強迫加上或去掉才能成功:)
上面這個版本是小弟在第一次收到這裡釋出的中文搜尋檔時,加上站長提供的訊息"要加上\才能搜尋許"所以參考站長釋出的版本modify了一下…\r
當時看站長的搜尋檔還一直覺得為什麼要把session處的那兩段給砍掉@_@
後來我自己的測試站上就試試不要砍(理由是那時沒時間去看那一段,只看了一下發覺根本沒有關於處理搜尋字串的部分!想說應該不砍應該沒有影響!
後來就看到有人回覆說沒辦法跳頁!再看了一下就覺得應該是這兩段的問題了!
接下來把中文字串放入index的工作就讓其他高人來努力了@_@