Typesense Laravel Scout搜索:大小写与变音符号处理问题
解决Typesense + Laravel Scout越南语大小写/变音符号不敏感搜索问题
核心方案
Typesense通过字段级的索引配置,结合内置规范化规则和分词器,可直接实现越南语的大小写、变音符号不敏感匹配,无需额外第三方工具。
具体配置步骤
1. 配置字段索引规则
针对需要搜索的字段(比如商品名称name),在Typesense集合Schema或Laravel Scout模型配置中设置以下参数:
tokenizer:使用standard分词器(原生支持多语言,包含越南语)symbols_to_index:设为空字符串,忽略无关符号normalization:启用lowercase(统一小写)和remove_diacritics(移除变音符号)规则
手动定义Typesense集合Schema示例
{ "name": "products", "fields": [ { "name": "name", "type": "string", "tokenizer": "standard", "symbols_to_index": "", "normalization": ["lowercase", "remove_diacritics"] } ] }
Laravel Scout模型内配置示例(Product.php)
public function searchableFields() { return [ 'name' => [ 'type' => 'string', 'tokenizer' => 'standard', 'symbols_to_index' => '', 'normalization' => ['lowercase', 'remove_diacritics'], ], // 其他需要搜索的字段同理配置 ]; }
2. 重新生成索引
修改配置后,必须重新导入数据到Typesense,让新规则生效:
php artisan scout:import "App\Models\Product"
验证效果
配置完成后,执行你的示例代码:
// 无重音搜索会匹配所有带重音的对应内容 $results = Product::search('xit chong nang')->get(); // 大写搜索会匹配所有大小写形式的结果 $results = Product::search('XỊT CHỐNG NẮNG')->get();
两种搜索都会返回包含xịt chống nắng的目标数据,实现预期的不敏感匹配。
补充说明
- Typesense的
remove_diacritics规则原生支持越南语变音符号处理,无需自定义规则 standard分词器会自动适配越南语词汇分割逻辑,保证搜索准确性- 若需全局统一配置,可在
config/scout.php的typesense.collections节点中设置默认规则
内容的提问来源于stack exchange,提问作者Hazel
相关产品推荐
相关产品推荐

