# 中文分词
配置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);