W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
Xunsearch
默認內(nèi)置了功能強大的 SCWS 分詞系統(tǒng),也附加提供了一些簡單常見的分詞規(guī)則, 但考慮到用戶的個性需求,特意提供了自定義分詞器的功能。
Note: 自定義分詞器存在一個缺陷,它不支持存儲位置信息,也就是不能按短語檢索、以及
NEAR
之類的 語法檢索。相當(dāng)于該字段配置中的phrase
值恒為no
,通常把自定義分詞用于一些帶有一定規(guī)則的簡要 字段,而不是更多的考慮語義關(guān)系。
自定義分詞器必須實現(xiàn) XSTokenizer 接口。假定您要編寫一個名為 xyz
的分詞器,則您要編寫的代碼 文件為XSTokenizerXyz.class.php
,請將文件統(tǒng)一放入 $prefix/sdk/php/lib
目錄。
通常來講,您只需要實現(xiàn) XSTokenizer::getTokens 即可。該函數(shù)接受 2個參數(shù),分別為要分詞的值以及 當(dāng)前的文檔對象(可選);返回值為分好的詞匯組成的數(shù)組。下面以按 -
分割字段為例:
class XSTokenizerXyz implements XSTokenizer
{
public function getTokens($value, XSDocument $doc = null)
{
$ret = array();
if (!empty($value)) {
$ret = explode('-', $value);
}
return $ret;
}
}
Note: XSTokenizer::getTokens 的參數(shù)
$value
的編碼始終為 UTF-8 。
如果您需要編寫帶有參數(shù)支持的分詞器,比如讓用戶傳入按什么字符分割,請參照下面寫法編寫構(gòu)造函數(shù):
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;
}
}
編寫完了自定義分詞器的代碼后,您就可以在項目配置文件中使用它了,在需要用這個分詞器的字段中 指定tokenizer
選項的值,例子中省略了字段的其它選項,實際編寫時可能還包括其它選項。
而在搜索語句中,如果指明了字段搜索前綴 field:XXX
那么搜索引擎內(nèi)部也會 對這個搜索語句執(zhí)行自定義分詞。
[some_field]; 不帶參數(shù)的用法tokenizer = xyz; 帶參數(shù)的用法,表示把 _ 作為參數(shù)傳遞給構(gòu)造函數(shù)tokenizer = xyz(_)
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: