編寫第一個配置文件

2019-08-14 14:00 更新

Xunsearch 的配置文件是純文本的 INI 格式,用任何文本編輯器均可編寫,在 Unix 類型的系統(tǒng)下推薦 用 vi,而 Windows 下可以用記事本或EditPlus 進(jìn)行編寫。我們也正在計(jì)劃不久的將來制作一個 Web 界面的編輯工具,以便進(jìn)行可視化的設(shè)計(jì)以及約束檢測。

Tip: 目前我們針對新手用戶開發(fā)了一個 WEB 版本的在線配置文件編輯輔助工具,點(diǎn)擊試用。

如果您是從頭閱讀到這兒,應(yīng)該對配置文件也有了基本的了解,下面我們以傳統(tǒng)的 discuz 論壇貼子為例子, 來學(xué)習(xí)編寫配置文件。

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

由于我們只是對貼子進(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)行針對性的設(shè)計(jì)和分析才能確定需要哪些字段。在 這個案例中我們的需求是要對所有的論壇貼子進(jìn)行標(biāo)題、內(nèi)容、作者全文檢索,并希望搜索結(jié)果能 過濾回貼、按發(fā)表時(shí)間排序、能按版塊過濾。明確了意圖之后我們就只需要從數(shù)據(jù)表中提取必要的 字段即可。

  • pid 主鍵,必須的

  • fid 按版塊檢索時(shí)需要用到

  • tid 搜索結(jié)果閱讀鏈接都是按 tid 來的,必備

  • first 表示該貼子是否為樓主,過濾回貼時(shí)用到

  • authorauthorid 按作者檢索用得到

  • subject 標(biāo)題

  • message 貼子內(nèi)容

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

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

3. 字段設(shè)計(jì)與分析

得到字段后,進(jìn)一步分析各個字段的用途與寫法。

  • pid 非常明顯,它是主鍵,所以它的類型必須是 id

  • fid 內(nèi)容為數(shù)字的版塊ID,但由于我們不需要對它進(jìn)行排序或區(qū)間查找,所以用 string 類型即可, 為了按版塊檢索,我們必須對它進(jìn)行索引,而它也不需要分詞,所以分詞器用內(nèi)置的 full。

  • tid 內(nèi)容也是數(shù)字的主題ID,我們暫不考慮按主題搜索,所以不需要索引,也沒有排序等要求,所以 只要當(dāng)作普通字段存儲下來即可。

  • first 用 1/0 不同值來表示是否為樓主,考慮到回貼過濾需求,它也需要索引,整個字段轉(zhuǎn)換成一個 詞即可,分詞器當(dāng)然選用 full。

  • author 作者名字檢索,考慮中文名支持,所以建議這個字段保留使用默認(rèn)內(nèi)置的 scws 分詞器。 由于希望在默認(rèn)不指明字段的情況下也能檢索作者字段,所以它的過索引方式應(yīng)為 both。

  • authorid 作者 ID,我們只用于搜索結(jié)果的作者鏈接,不需要索引。

  • subject 標(biāo)題類型為 title。

  • message 主內(nè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)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號