# 中文分词

配置mapping时,可设置具体的分词方式,配置后,在搜索时,再无需配置分词方式,内部会自动识别。当然,搜索时,你可以强制配置具体的分词方式,但没有什么意义,因为前后分词标准不统一,搜索效果会非常差。

只有text类型,可以配置分词方式,其它数据类型配置无效

# 分词模式

# 词典分词

 // 中文分词
'analyzer' => 'segment', // 为空/complete/not,代表整体匹配; segment 中文分词; 

# ngram分词

// ngram模式
'analyzer' => [ 
    'ngram' => 3,// 分词长度为3个字符 支持int、数组,如果是数组,例如[2,4],代表3个截取窗口,截取长度分别为2、3、4
    'separator' => ',',//分隔符模式,示例是以逗号切分
],

# 分隔符分词

// 分隔符模式
'analyzer' => [ 
    'separator' => ',',//示例是以逗号进行切分
],

# 文本预处理

# 导入数据时

//导入数据
//实例化引擎
$Wind = new \WindSearch\Index\Wind($indexName);
// 构建索引前,进行初始化
 $Wind->buildIndexInit();

// 分词预处理部分
// 开启字符串预处理,此方法可以提高数字字母的召回率
$Wind->onStringPreprocessing();
// 开启繁体转简体
$Wind->onTraditionalToSimplified();
 // 提取中文数字,并转成阿拉伯数字
$Wind->onZhToNumber();

// 开启拼音索引 稍慢,不是必要的就不要开启
$Wind->onPinyin();


//$result 数组 从数据库中查询的数据,必须包含int类型的id主键字段
foreach ($result as $v) {
    $Wind->indexer($v);
}
//每组$result数据导入后,进行批量写入文件保存,请合理设置分批查询的$result数据量
$Wind->batchWrite();

# 搜索时

// 实例化引擎
$Wind = new \WindSearch\Index\Wind($indexName);
// 加载分词功能
$Wind->loadAnalyzer();


// 分词预处理部分
// 开启字符串预处理,此方法可以提高数字字母的召回率
$Wind->onStringPreprocessing();
// 开启繁体转简体
$Wind->onTraditionalToSimplified();
// 提取中文数字,且转阿拉伯数字
$Wind->onZhToNumber();

// 开启拼音索引 稍慢,不是必要的就不要开启
$Wind->onPinyin();

//开始搜索

// 搜索单个字段
$query = [
	...

# 分词词库

词库包括基本词库自定义词库(自定义词、自定义非词)。

# 基本词库

基本词库只包含常见的中文词汇,对于普通搜索场景够用了,如果你需要行业词库,可联系我购买,vx:azg555666 如果基本词库满足不了你的需求,你也可以自己开发分词插件

# 自定义词

/windIndexCore/dic/custom_dic.txt 文件中,把需要添加的词,放进此文件里,每个词语占一行即可,其它再无需任何操作。

# 自定义非词

(不想让它成为一个词)

/windIndexCore/dic/not_word.txt 文件中,把需要添加的非词,放进此文件里,每个词语占一行即可,其它再无需任何操作。

# 分词测试

# 系统分词插件测试

// 实例化引擎
$Wind = new \WindSearch\Index\Wind();
// 加载系统分词插件
$Wind->loadAnalyzer();
$query = [
    // 测试字符串
    'text'=>'可以用于,敏感词检测',
    
    //词典分词
    // 'analyzer'=> 'segment',
    
    // ngram分词
    'analyzer'=>[
        'ngram'=>[2,4]
    ]
];
// $res 分词结果
$res = $Wind->testAnalyzer($query);

# 自定义分词插件测试

// 实例化引擎
$Wind = new \WindSearch\Index\Wind();
// 加载自定义分词插件
$Wind->loadCustomAnalyzer('你的分词插件名称');
$query = [
    // 测试字符串
    'text'=>'可以用于,敏感词检测',
    
    //词典分词
    // 'analyzer'=> 'segment',
    
    // ngram分词
    'analyzer'=>[
        'ngram'=>[2,4]
    ]
];
// $res 分词结果
$res = $Wind->testAnalyzer($query);