文檔說明

自定義分詞器

Xunsearch 默認內置了功能強大的 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$

留下一條評論吧!

請到論壇 登錄 后刷新本頁面!

青海快三开奖走势图_