編寫(xiě)第一個(gè)配置文件

2019-08-14 14:00 更新

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ě)配置文件。

1. Discuz 的論壇貼子 MySQL 表結(jié)構(gòu)

由于我們只是對(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;

2. 搜索的設(shè)計(jì)與分析

首先得搞明白我們要得到什么樣的搜索效果,進(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í)用到

  • authorauthorid 按作者檢索用得到

  • subject 標(biāo)題

  • message 貼子內(nèi)容

  • dateline 發(fā)表時(shí)間,要用到

其它的有些字段,比如 invisibleanonymous 表面看上去跟搜索結(jié)果也是有關(guān)系的,但 實(shí)際上這些可以在索引入庫(kù)時(shí)進(jìn)行處理和排除,完全沒(méi)有必要放到搜索數(shù)據(jù)中去,所以不列入。

3. 字段設(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)行任何索引。

4. 配置文件結(jié)果

自此字段分析與設(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


以上內(nèi)容是否對(duì)您有幫助:
在線(xiàn)筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)