Strapi中$containsi参数对西里尔文字段不生效问题求助
西里尔文字段使用$containsi实现精确包含搜索的问题
我有一个存储西里尔文的name字段,尝试通过$containsi参数对该字段执行包含搜索,当前的请求代码如下:
fetch("https://example.com/api/products?filters%5B$or%5D%5B0%5D%5Bname%5D%5B$containsi%5D=%D0%B3%D1%80", { "headers": { "accept": "application/json, text/plain, */*" }, "body": null, "method": "GET", "mode": "cors", "credentials": "omit" });
我之前用过模糊搜索插件,功能正常,但我需要的是常规包含搜索——即返回字段中包含完整查询词的结果,而非模糊搜索那种匹配部分字符的结果。
解决方案
验证西里尔文URL编码
当前查询参数%D0%B3%D1%80解码后是西里尔文гр,确认编码正确,避免因编码错误导致匹配逻辑异常。确认后端
$containsi的实际行为
多数支持$containsi的后端框架(如Strapi),该操作符本质是封装了MongoDB的$regex+i选项,默认就是匹配包含完整查询词的结果。如果当前返回的是部分字符匹配,可能是后端配置了自动添加通配符,此时可以尝试直接传递原始查询词,或检查后端的查询规则。改用原生正则表达式参数
如果$containsi不符合预期,可直接使用$regex和$options参数实现精确包含(不区分大小写),示例代码如下:
fetch("https://example.com/api/products?filters%5B$or%5D%5B0%5D%5Bname%5D%5B$regex%5D=%D0%B3%D1%80&filters%5B$or%5D%5B0%5D%5Bname%5D%5B$options%5D=i", { "headers": { "accept": "application/json, text/plain, */*" }, "body": null, "method": "GET", "mode": "cors", "credentials": "omit" });
这个请求会匹配所有name字段中包含完整гр字符串的结果,且不区分大小写。
- 排除模糊搜索插件的干扰
如果之前的模糊搜索插件修改了全局查询逻辑,建议暂时禁用插件,测试原生$containsi或$regex的效果,确认是否是插件导致的行为异常。
内容的提问来源于stack exchange,提问作者danyalutsevich
相关产品推荐
相关产品推荐

