You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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"
});

我之前用过模糊搜索插件,功能正常,但我需要的是常规包含搜索——即返回字段中包含完整查询词的结果,而非模糊搜索那种匹配部分字符的结果。


解决方案

  1. 验证西里尔文URL编码
    当前查询参数%D0%B3%D1%80解码后是西里尔文гр,确认编码正确,避免因编码错误导致匹配逻辑异常。

  2. 确认后端$containsi的实际行为
    多数支持$containsi的后端框架(如Strapi),该操作符本质是封装了MongoDB的$regex+i选项,默认就是匹配包含完整查询词的结果。如果当前返回的是部分字符匹配,可能是后端配置了自动添加通配符,此时可以尝试直接传递原始查询词,或检查后端的查询规则。

  3. 改用原生正则表达式参数
    如果$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字段中包含完整гр字符串的结果,且不区分大小写。

  1. 排除模糊搜索插件的干扰
    如果之前的模糊搜索插件修改了全局查询逻辑,建议暂时禁用插件,测试原生$containsi或$regex的效果,确认是否是插件导致的行为异常。

内容的提问来源于stack exchange,提问作者danyalutsevich

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 04:18:33