[Xunsearch PHP-SDK](http://www.xunsearch.com) v1.4.8 权威指南
1. [Discuz 的论坛贴子 MySQL 表结构](#)
1. [搜索的设计与分析](#)
1. [字段设计与分析](#)
1. [配置文件结果](#)
# 编写第一个配置文件
`Xunsearch` 的配置文件是纯文本的 `INI` 格式,用任何文本编辑器均可编写,在 `Unix` 类型的系统下推荐用 `vi`,而 `Windows` 下可以用记事本或 `EditPlus` 进行编写。我们也正在计划不久的将来制作一个 `Web`界面的编辑工具,以便进行可视化的设计以及约束检测。
> **Tip:** 目前我们针对新手用户开发了一个 WEB 版本的在线配置文件编辑辅助工具,[点击试用](http://www.xunsearch.com/tools/iniconfig)。
如果您是从头阅读到这儿,应该对配置文件也有了基本的了解,下面我们以传统的 `discuz` 论坛贴子为例子,来学习编写配置文件。
### 1. Discuz 的论坛贴子 MySQL 表结构[?]()
由于我们只是对贴子进行搜索,所以只需要关心它的贴子表即可,表结构如下:
~~~
--
-- 表的结构 `cdb_posts`
--
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. 字段设计与分析[?]()
得到字段后,进一步分析各个字段的用途与写法。
- `pid` 非常明显,它是主键,所以它的类型必须是 `id`
- `fid` 内容为数字的版块ID,但由于我们不需要对它进行排序或区间查找,所以用 `string` 类型即可,为了按版块检索,我们必须对它进行索引,而它也不需要分词,所以分词器用内置的 `full`。
- `tid` 内容也是数字的主题ID,我们暂不考虑按主题搜索,所以不需要索引,也没有排序等要求,所以只要当作普通字段存储下来即可。
- `first` 用 1/0 不同值来表示是否为楼主,考虑到回贴过滤需求,它也需要索引,整个字段转换成一个词即可,分词器当然选用 `full`。
- `author` 作者名字检索,考虑中文名支持,所以建议这个字段保留使用默认内置的 `scws` 分词器。由于希望在默认不指明字段的情况下也能检索作者字段,所以它的过索引方式应为 `both`。
- `authorid` 作者 ID,我们只用于搜索结果的作者链接,不需要索引。
- `subject` 标题类型为 `title`。
- `message` 主内容,类型为 `body`。
- `dateline` 时间戳记,由于需要排序,所以该字段不能存为 `string`,必须用 `numeric`,但不需要进行任何索引。
### 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
~~~
$Id$
[« 自定义分词器](#)
[索引概述 »](#)
Copyright © 2008-2011 by [杭州云圣网络科技有限公司](http://www.xunsearch.com)
All Rights Reserved.
![](https://box.kancloud.cn/2015-09-10_55f11d02cc334.gif)
![](https://box.kancloud.cn/2015-09-10_55f11d02d2f0f.gif)
![](https://box.kancloud.cn/2015-09-10_55f11d02d9928.gif)
- 权威指南
- 新手上路
- 最新主要变动
- 概述
- 关于 Xunsearch PHP-SDK
- 安装、升级
- 体验 demo 项目
- 开发规范
- 开发流程
- 了解基础对象
- 基础对象概述
- XS 项目
- XSException 异常
- XSDocument 文档
- XSIndex 索引管理
- XSSearch 搜索
- XSTokenizer 分词接口
- 编写项目配置文件
- 项目配置详解
- 自定义分词器
- 编写第一个配置文件
- 管理索引
- 索引概述
- 添加文档
- 更新、修改文档
- 删除文档
- 清空索引
- 平滑重建索引
- 使用索引缓冲区
- 自定义SCWS词库
- 使用搜索
- 搜索概述
- 构建搜索语句
- 获取搜索匹配结果
- 获取搜索匹配数量
- 获取热门搜索词
- 获取相关搜索词
- 搜索建议和纠错
- 按字段值分面搜索
- 使用辅助工具
- RequiredCheck 运行检测
- Indexer 索引管理器
- Quest 搜索测试工具
- SearchSkel 生成搜索代码
- IniWizzard 配置文件向导
- Logger 搜索日志管理
- 专题
- 同义词搜索功能
- 在SDK中使用SCWS分词
- API 指南
- XS
- XS
- XSCommand
- XSComponent
- XSDocument
- XSErrorException
- XSException
- XSFieldMeta
- XSFieldScheme
- XSIndex
- XSSearch
- XSServer
- XS.tokenizer
- XSTokenizer
- XSTokenizerFull
- XSTokenizerNone
- XSTokenizerScws
- XSTokenizerSplit
- XSTokenizerXlen
- XSTokenizerXstep
- XS.util
- XSCsvDataSource
- XSDataFilter
- XSDatabaseDataSource
- XSDebugFilter
- XSJsonDataSource
- XSUtil
- XS.util.db
- XSDatabase
- XSDatabaseMySQL
- XSDatabaseMySQLI
- XSDatabasePDO
- XSDatabasePDO_MySQL
- XSDatabasePDO_PgSQL
- XSDatabasePDO_SQLite
- XSDatabasePgSQL
- XSDatabaseSQLite
- XSDatabaseSQLite3
- XS.utilf
- XSDataSource
- 其它文档
- 关于 xunsearch
- 特色和优势
- Xunsearch 架构简图
- 下载 Xunsearch
- 商业服务与支持
- XunSearch 授权许可证