Xunsearch
的配置文件是純文本的 INI
格式,用任何文本編輯器均可編寫(xiě),在 Unix
類(lèi)型的系統(tǒng)下推薦 用 vi
,而 Windows
下可以用記事本或EditPlus
進(jìn)行編寫(xiě)。我們也正在計(jì)劃不久的將來(lái)制作一個(gè) Web
界面的編輯工具,以便進(jìn)行可視化的設(shè)計(jì)以及約束檢測(cè)。
Tip: 目前我們針對(duì)新手用戶(hù)開(kāi)發(fā)了一個(gè) WEB 版本的在線(xiàn)配置文件編輯輔助工具,點(diǎn)擊試用。
如果您是從頭閱讀到這兒,應(yīng)該對(duì)配置文件也有了基本的了解,下面我們以傳統(tǒng)的 discuz
論壇貼子為例子, 來(lái)學(xué)習(xí)編寫(xiě)配置文件。
由于我們只是對(duì)貼子進(jìn)行搜索,所以只需要關(guān)心它的貼子表即可,表結(jié)構(gòu)如下:
CREATE TABLE `cdb_posts` (
`pid` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`fid` smallint(6) UNSIGNED NOT NULL DEFAULT '0',
`tid` mediumint(8) UNSIGNED NOT NULL DEFAULT '0',
`first` tinyint(1) NOT NULL DEFAULT '0',
`author` varchar(15) NOT NULL DEFAULT '',
`authorid` mediumint(8) UNSIGNED NOT NULL DEFAULT '0',
`subject` varchar(80) NOT NULL DEFAULT '',
`dateline` int(10) UNSIGNED NOT NULL DEFAULT '0',
`message` mediumtext NOT NULL,
`useip` varchar(15) NOT NULL DEFAULT '',
`invisible` tinyint(1) NOT NULL DEFAULT '0',
`anonymous` tinyint(1) NOT NULL DEFAULT '0',
`usesig` tinyint(1) NOT NULL DEFAULT '0',
`htmlon` tinyint(1) NOT NULL DEFAULT '0',
`bbcodeoff` tinyint(1) NOT NULL DEFAULT '0',
`smileyoff` tinyint(1) NOT NULL DEFAULT '0',
`parseurloff` tinyint(1) NOT NULL DEFAULT '0',
`attachment` tinyint(1) NOT NULL DEFAULT '0',
`rate` smallint(6) NOT NULL DEFAULT '0',
`ratetimes` tinyint(3) UNSIGNED NOT NULL DEFAULT '0',
`status` tinyint(1) NOT NULL DEFAULT '0',
PRIMARY KEY (`pid`),
KEY `fid` (`fid`),
KEY `authorid` (`authorid`),
KEY `dateline` (`dateline`),
KEY `invisible` (`invisible`),
KEY `displayorder` (`tid`, `invisible`, `dateline`),
KEY `first` (`tid`, `first`)
) ENGINE = MyISAM CHARSET = utf8;
首先得搞明白我們要得到什么樣的搜索效果,進(jìn)行針對(duì)性的設(shè)計(jì)和分析才能確定需要哪些字段。在 這個(gè)案例中我們的需求是要對(duì)所有的論壇貼子進(jìn)行標(biāo)題、內(nèi)容、作者全文檢索,并希望搜索結(jié)果能 過(guò)濾回貼、按發(fā)表時(shí)間排序、能按版塊過(guò)濾。明確了意圖之后我們就只需要從數(shù)據(jù)表中提取必要的 字段即可。
pid
主鍵,必須的
fid
按版塊檢索時(shí)需要用到
tid
搜索結(jié)果閱讀鏈接都是按 tid 來(lái)的,必備
first
表示該貼子是否為樓主,過(guò)濾回貼時(shí)用到
author
, authorid
按作者檢索用得到
subject
標(biāo)題
message
貼子內(nèi)容
dateline
發(fā)表時(shí)間,要用到
其它的有些字段,比如 invisible
, anonymous
表面看上去跟搜索結(jié)果也是有關(guān)系的,但 實(shí)際上這些可以在索引入庫(kù)時(shí)進(jìn)行處理和排除,完全沒(méi)有必要放到搜索數(shù)據(jù)中去,所以不列入。
得到字段后,進(jìn)一步分析各個(gè)字段的用途與寫(xiě)法。
pid
非常明顯,它是主鍵,所以它的類(lèi)型必須是 id
fid
內(nèi)容為數(shù)字的版塊ID,但由于我們不需要對(duì)它進(jìn)行排序或區(qū)間查找,所以用 string
類(lèi)型即可, 為了按版塊檢索,我們必須對(duì)它進(jìn)行索引,而它也不需要分詞,所以分詞器用內(nèi)置的 full
。
tid
內(nèi)容也是數(shù)字的主題ID,我們暫不考慮按主題搜索,所以不需要索引,也沒(méi)有排序等要求,所以 只要當(dāng)作普通字段存儲(chǔ)下來(lái)即可。
first
用 1/0 不同值來(lái)表示是否為樓主,考慮到回貼過(guò)濾需求,它也需要索引,整個(gè)字段轉(zhuǎn)換成一個(gè) 詞即可,分詞器當(dāng)然選用 full
。
author
作者名字檢索,考慮中文名支持,所以建議這個(gè)字段保留使用默認(rèn)內(nèi)置的 scws
分詞器。 由于希望在默認(rèn)不指明字段的情況下也能檢索作者字段,所以它的過(guò)索引方式應(yīng)為 both
。
authorid
作者 ID,我們只用于搜索結(jié)果的作者鏈接,不需要索引。
subject
標(biāo)題類(lèi)型為 title
。
message
主內(nèi)容,類(lèi)型為 body
。
dateline
時(shí)間戳記,由于需要排序,所以該字段不能存為 string
,必須用 numeric
,但不需要 進(jìn)行任何索引。
自此字段分析與設(shè)計(jì)已然明了,下面給出完整的配置文件內(nèi)容,實(shí)際使用時(shí)可以將文件保存至$prefix/sdk/php/app/discuz.ini
。
project.name = discuzproject.default_charset = GBK;服務(wù)端用默認(rèn)值 ;server.index = 8383;server.search = 8384 [pid]type = id [fid]index = selftokenizer = full [tid] [first]index = selftokenizer = full [author]index = both [authorid] [subject]type = title [message]type = body [dateline]type = numeric
更多建議: