<h1 class="notshow" >编写第一个配置文件</h1><p ><code >Xunsearch</code>的配置文件是纯文本的<code >INI</code>格式,用任何文本编辑器均可编写,在<code >Unix</code>类型的系统下推荐 用<code >vi</code>,而<code >Windows</code>下可以用记事本或<code >EditPlus</code>进行编写。我们也正在计划不久的将来制作一个<code >Web</code>界面的编辑工具,以便进行可视化的设计以及约束检测。</p><blockquote class="tip" ><p ><strong >Tip:</strong>目前我们针对新手用户开发了一个 WEB 版本的在线配置文件编辑辅助工具,<a href="http://www.xunsearch.com/tools/iniconfig" >点击试用</a>。</p></blockquote><p >如果您是从头阅读到这儿,应该对配置文件也有了基本的了解,下面我们以传统的<code >discuz</code>论坛贴子为例子, 来学习编写配置文件。</p><p><a class="ch" >1. Discuz 的论坛贴子 MySQL 表结构</a><a class="anchor" ></a><span ></span></p><p >由于我们只是对贴子进行搜索,所以只需要关心它的贴子表即可,表结构如下:</p><pre >----表的结构`cdb_posts`--CREATETABLE`cdb_posts`(
`pid`int(10)unsignedNOTNULLauto_increment,`fid`smallint(6)unsignedNOTNULLdefault'0',`tid`mediumint(8)unsignedNOTNULLdefault'0',`first`tinyint(1)NOTNULLdefault'0',`author`varchar(15)NOTNULLdefault'',`authorid`mediumint(8)unsignedNOTNULLdefault'0',`subject`varchar(80)NOTNULLdefault'',`dateline`int(10)unsignedNOTNULLdefault'0',`message`mediumtextNOTNULL,`useip`varchar(15)NOTNULLdefault'',`invisible`tinyint(1)NOTNULLdefault'0',`anonymous`tinyint(1)NOTNULLdefault'0',`usesig`tinyint(1)NOTNULLdefault'0',`htmlon`tinyint(1)NOTNULLdefault'0',`bbcodeoff`tinyint(1)NOTNULLdefault'0',`smileyoff`tinyint(1)NOTNULLdefault'0',`parseurloff`tinyint(1)NOTNULLdefault'0',`attachment`tinyint(1)NOTNULLdefault'0',`rate`smallint(6)NOTNULLdefault'0',`ratetimes`tinyint(3)unsignedNOTNULLdefault'0',`status`tinyint(1)NOTNULLdefault'0',PRIMARYKEY(`pid`),KEY`fid`(`fid`),KEY`authorid`(`authorid`),KEY`dateline`(`dateline`),KEY`invisible`(`invisible`),KEY`displayorder`(`tid`,`invisible`,`dateline`),KEY`first`(`tid`,`first`))ENGINE=MyISAMDEFAULTCHARSET=utf8;</pre><p><a class="ch" >2. 搜索的设计与分析</a><a class="anchor" ></a><span ></span></p><p >首先得搞明白我们要得到什么样的搜索效果,进行针对性的设计和分析才能确定需要哪些字段。在 这个案例中我们的需求是要对所有的论坛贴子进行标题、内容、作者全文检索,并希望搜索结果能 过滤回贴、按发表时间排序、能按版块过滤。明确了意图之后我们就只需要从数据表中提取必要的 字段即可。</p><ul class=" list-paddingleft-2"><li><p><code >pid</code>主键,必须的</p></li><li><p><code >fid</code>按版块检索时需要用到</p></li><li><p><code >tid</code>搜索结果阅读链接都是按 tid 来的,必备</p></li><li><p><code >first</code>表示该贴子是否为楼主,过滤回贴时用到</p></li><li><p><code >author</code>,<code >authorid</code>按作者检索用得到</p></li><li><p><code >subject</code>标题</p></li><li><p><code >message</code>贴子内容</p></li><li><p><code >dateline</code>发表时间,要用到</p></li></ul><p >其它的有些字段,比如<code >invisible</code>,<code >anonymous</code>表面看上去跟搜索结果也是有关系的,但 实际上这些可以在索引入库时进行处理和排除,完全没有必要放到搜索数据中去,所以不列入。</p><p><a class="ch" >3. 字段设计与分析</a><a class="anchor" ></a><span ></span></p><p >得到字段后,进一步分析各个字段的用途与写法。</p><ul class=" list-paddingleft-2"><li><p><code >pid</code>非常明显,它是主键,所以它的类型必须是<code >id</code></p></li><li><p><code >fid</code>内容为数字的版块ID,但由于我们不需要对它进行排序或区间查找,所以用<code >string</code>类型即可, 为了按版块检索,我们必须对它进行索引,而它也不需要分词,所以分词器用内置的<code >full</code>。</p></li><li><p><code >tid</code>内容也是数字的主题ID,我们暂不考虑按主题搜索,所以不需要索引,也没有排序等要求,所以 只要当作普通字段存储下来即可。</p></li><li><p><code >first</code>用 1/0 不同值来表示是否为楼主,考虑到回贴过滤需求,它也需要索引,整个字段转换成一个 词即可,分词器当然选用<code >full</code>。</p></li><li><p><code >author</code>作者名字检索,考虑中文名支持,所以建议这个字段保留使用默认内置的<code >scws</code>分词器。 由于希望在默认不指明字段的情况下也能检索作者字段,所以它的过索引方式应为<code >both</code>。</p></li><li><p><code >authorid</code>作者 ID,我们只用于搜索结果的作者链接,不需要索引。</p></li><li><p><code >subject</code>标题类型为<code >title</code>。</p></li><li><p><code >message</code>主内容,类型为<code >body</code>。</p></li><li><p><code >dateline</code>时间戳记,由于需要排序,所以该字段不能存为<code >string</code>,必须用<code >numeric</code>,但不需要 进行任何索引。</p></li></ul><p><a class="ch" >4. 配置文件结果</a><a class="anchor" ></a><span ></span></p><p >自此字段分析与设计已然明了,下面给出完整的配置文件内容,实际使用时可以将文件保存至<code >$prefix/sdk/php/app/discuz.ini</code>。</p><pre >project.name=discuzproject.default_charset=GBK;服务端用默认值
;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</pre>