[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.



- 權威指南
- 新手上路
- 最新主要變動
- 概述
- 關于 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 授權許可證