站長俱樂部:站长论坛


返回   站長俱樂部:站长论坛 > 架設網站區 > 網站架設和網頁設計 > 論壇架設
Blog 論壇幫助 社區 日曆事件 今日新文章 搜尋

回覆
 
主題工具 顯示模式
  #1  
舊 2006-02-26, 12:08 PM
ckmarkhsu ckmarkhsu 目前離線
論壇管理員
 
註冊日期: 2006-02-17
文章: 85
預設 淺談論談搜尋模式與方法

此文章由 台灣深藍vBulletin技術論壇 ckmarkhsu 撰寫,轉載請務必完整且註明

出處 http://www.twvbb.com/vbb/showthread.php?t=530

=========================================================

這麼多人在詢問,我以我粗淺的經驗來解釋一下 vBulletin 中文代理修正的中文搜尋方式好了^^"

MySQL 常用的搜尋(比對)有以下幾種

1. 完全相符比對(這不算搜尋喔:P)
PHP 代碼:
WHERE `pagetext` = '深藍' 
此語法的意思是,搜尋文章內容( pagetext 欄位 )等於 "深藍" 的資料,他只會比對完全相等

因此如果文章內容是 "嘿 深藍好無聊" 那就不會被選到,這種是三項中效率最高的條件式,但原始語法上最沒用:P

2. 相似比對(常用搜尋法)
PHP 代碼:
WHERE `pagetextLIKE '%要搜尋的文字%' 
此語法的意思是,搜尋文章內容( pagetext 欄位 )文字包含 "深藍" 的資料

因此如果文章內容是 "嘿 深藍好無聊"

其中包含深藍二字,就會被選到,這種是三項中效率最低的條件式,但最簡易使用:P

3. MySQL 全文搜尋(正規撰寫程式時常用搜尋法)
這語法有點複雜(其實是我不太會XD),大致上,他是用 正規表達式,配合關聯繫數去判斷

因此,如果你搜尋是 "Deep Blue is so stupid",文章內容包含 "Deep Blue is too stupid" 也可能會被搜尋到( 例子有點爛^^" )

這全看你的關聯係數與正規表達式怎麼下,這種是三項中效率次高的條件式,可惜不支援中文搜尋

第 3 種模式鐵定不能用,雖然他是英語系程式最正規的搜尋法,但可惜他不支援中文

第 2 種我寫程式很常用,因為效率較低,因此適用於小資料量的搜尋^^"

不過其實測試過,30 幾萬篇文章搜尋也沒什麼問題:P

那有沒有什麼方式,可以在幾百萬,甚至幾千萬筆資料中,快速搜尋出想要的文字!?

當然有 但要達到快速搜尋,一定要事先整理資料

因此,我們可以用以下的分析方式,配合第一種條件式來達到高速且精準的搜尋


以此這段句子為例,"虛空是台灣數一數二的技術論壇"

他會在 word 資料表中,存成: (以下每行為一筆資料紀錄)

(前面為編號,後面式 title 欄位儲存資料)

01 虛空
02 空是
03 是台
04 台灣
05 灣數
06 數一
07 一一
08 一數
09 數二
10 二的
11 的技
12 技術
13 術論
14 論壇

他會順便將這些關鍵字與該文章作連結( 這是一定要的:P )

因此,如果你想搜尋 "台灣",系統就會執行這條件式

PHP 代碼:
SELECT postid FROM word WHERE tilte '台灣' 
系統便會發現,第 04 筆資料符合我們的搜尋條件,他會再依照 04 筆資料裡面與文章的對應,去把符合的回覆找出來

那如果我們想搜尋 "灣數" 這種怪異的詞句,可以嗎? 系統會執行這條件式

PHP 代碼:
SELECT postid FROM word WHERE tilte '灣數' 
系統便會發現,第 05 筆資料符合我們的搜尋條件

這是目前中文代理用在解決中文搜尋的方式(當然這只是最基本的理論,實際上沒這麼簡單)

但是無兩全,此方法雖好,也可以高效率精準搜尋到文章內容,但缺點是會增加 2 倍空間

這就看你怎麼取捨了,依我個人的建議

30萬文章以下的論壇,開啟 vBulletin中文版中內建的 "直接搜尋 post 表" (也就是第二種模式)即可

若您文章數量多,空間又無限大(例如自有主機),那你就可以試試看中文官方的搜尋模式啦
回覆時引用此篇文章
回覆

書籤


發文規則
不可以發表新主題
不可以發表回覆
不可以上傳附件
不可以編輯自己的文章

啟用 BB 代碼
論壇啟用 表情符號
論壇啟用 [IMG] 代碼
論壇禁用 HTML 代碼

論壇跳轉

 

所有時間均為 +8。現在的時間是 12:28 PM


本站主機由網易虛擬主機代管
Powered by vBulletin® 版本 3.8.4
版權所有 ©2000 - 2024,Jelsoft Enterprises Ltd.