[Xunsearch PHP-SDK](http://www.xunsearch.com) v1.4.8 权威指南
1. [编写自定义分词器](#)
1. [使用自定义分词器](#)
# 自定义分词器
`Xunsearch` 默认内置了功能强大的 [SCWS](http://www.xunsearch.com/scws/) 分词系统,也附加提供了一些简单常见的分词规则,但考虑到用户的个性需求,特意提供了自定义分词器的功能。
> **Note:** 自定义分词器存在一个缺陷,它不支持存储位置信息,也就是不能按短语检索、以及 `NEAR` 之类的 语法检索。相当于该字段配置中的 `phrase` 值恒为 `no`,通常把自定义分词用于一些带有一定规则的简要 字段,而不是更多的考虑语义关系。
### 1. 编写自定义分词器[?]()
自定义分词器必须实现 [XSTokenizer](#) 接口。假定您要编写一个名为 `xyz` 的分词器,则您要编写的代码文件为 `XSTokenizerXyz.class.php`,请将文件统一放入 `$prefix/sdk/php/lib` 目录。
通常来讲,您只需要实现 [XSTokenizer::getTokens](#) 即可。该函数接受 2个参数,分别为要分词的值以及当前的文档对象(可选);返回值为分好的词汇组成的数组。下面以按 `-` 分割字段为例:
~~~
class XSTokenizerXyz implements XSTokenizer
{
public function getTokens($value, XSDocument $doc = null)
{
$ret = array();
if (!empty($value))
$ret = explode('-', $value);
return $ret;
}
}
~~~
> **Note:**[XSTokenizer::getTokens](#) 的参数 `$value` 的编码始终为 UTF-8 。
如果您需要编写带有参数支持的分词器,比如让用户传入按什么字符分割,请参照下面写法编写构造函数:
~~~
class XSTokenizerXyz implements XSTokenizer
{
private $delim = '-'; // 默认按 - 分割
public function __construct($arg = null)
{
if ($arg !== null && $arg !== '')
$this->delim = $arg;
}
public function getTokens($value, XSDocument $doc)
{
$ret = array();
if (!empty($value))
$ret = explode($this->delim, $value);
return $ret;
}
}
~~~
### 2. 使用自定义分词器[?]()
编写完了自定义分词器的代码后,您就可以在项目配置文件中使用它了,在需要用这个分词器的字段中指定 `tokenizer` 选项的值,例子中省略了字段的其它选项,实际编写时可能还包括其它选项。
而在[搜索语句](#)中,如果指明了字段搜索前缀 `field:XXX` 那么搜索引擎内部也会对这个搜索语句执行自定义分词。
~~~
[some_field]
; 不带参数的用法
tokenizer = xyz
; 带参数的用法,表示把 _ 作为参数传递给构造函数
tokenizer = xyz(_)
~~~
$Id$
[« 项目配置详解](#)
[编写第一个配置文件 »](#)
Copyright © 2008-2011 by [杭州云圣网络科技有限公司](http://www.xunsearch.com)
All Rights Reserved.
![](https://box.kancloud.cn/2015-09-10_55f11d02b2acd.gif)
![](https://box.kancloud.cn/2015-09-10_55f11d02ba7f1.gif)
![](https://box.kancloud.cn/2015-09-10_55f11d02c0ea7.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 授权许可证