编写第一个配置文件
Xunsearch 的配置文件是纯文本的 INI 格式,用任何文本编辑器均可编写,在 Unix 类型的系统下推荐用 vi,而 Windows 下可以用记事本或 EditPlus 进行编写。我们也正在计划不久的将来制作一个 Web 界面的编辑工具,以便进行可视化的设计以及约束检测。
Tip:目前我们针对新手用户开发了一个 WEB 版本的在线配置文件编辑辅助工具,点击试用。
如果您是从头阅读到这儿,应该对配置文件也有了基本的了解,下面我们以传统的 discuz 论坛贴子为例子,来学习编写配置文件。
1. Discuz 的论坛贴子 MySQL 表结构
由于我们只是对贴子进行搜索,所以只需要关心它的贴子表即可,表结构如下:
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 DEFAULT CHARSET=utf8;
2. 搜索的设计与分析
首先得搞明白我们要得到什么样的搜索效果,进行针对性的设计和分析才能确定需要哪些字段。在这个案例中我们的需求是要对所有的论坛贴子进行标题、内容、作者全文检索,并希望搜索结果能过滤回贴、按发表时间排序、能按版块过滤。明确了意图之后我们就只需要从数据表中提取必要的字段即可。
pid 主键,必须的
fid 按版块检索时需要用到
tid 搜索结果阅读链接都是按tid来的,必备
first 表示该贴子是否为楼主,过滤回贴时用到
author, authorid 按作者检索用得到
subject 标题
message 贴子内容
dateline 发表时间,要用到
其它的有些字段,比如 invisible, anonymous 表面看上去跟搜索结果也是有关系的,但实际上这些可以在索引入库时进行处理和排除,完全没有必要放到搜索数据中去,所以不列入。
3. 字段设计与分析
得到字段后,进一步分析各个字段的用途与写法。
4. 配置文件结果
自此字段分析与设计已然明了,下面给出完整的配置文件内容,实际使用时可以将文件保存至 $prefix/sdk/php/app/discuz.ini。
project.name = discuz
project.default_charset = GBK
;服务端用默认值
;server.index = 8383
;server.search = 8384
[pid]
type = id
[fid]
index = self
tokenizer = full
[tid]
[first]
index = self
tokenizer = full
[author]
index = both
[authorid]
[subject]
type = title
[message]
type = body
[dateline]
type = numeric