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