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

如何实现单个字符串多关键词的列表过滤功能?

多关键词列表过滤实现方案

问题原因

当前过滤逻辑是检查产品字段是否包含完整输入字符串,当输入Football other时,没有产品的title/info/seller字段包含这个完整字符串,因此返回空列表。我们需要实现所有关键词都能在产品任意字段中匹配的逻辑。

解决方案代码

修改过滤方法,拆分输入为多个关键词,验证每个关键词都能匹配产品的任意字段:

List<Product> filterByText(String text) {
  // 拆分输入为关键词数组,过滤空字符串(处理多空格场景)
  List<String> keywords = text.split(' ').where((keyword) => keyword.isNotEmpty).toList();
  
  // 无关键词时返回全部产品
  if (keywords.isEmpty) return _p;
  
  return _p.where((product) {
    // 验证当前产品是否匹配所有关键词
    return keywords.every((keyword) {
      // 关键词匹配任意字段即可
      return product.title.contains(keyword) ||
             product.info.contains(keyword) ||
             product.seller.contains(keyword);
    });
  }).toList();
}

逻辑说明

  1. 拆分关键词:用split(' ')将输入字符串按空格拆分,再过滤掉空字符串,避免多空格导致无效匹配。
  2. 全关键词匹配:通过keywords.every(...)确保产品必须满足所有关键词的匹配条件。
  3. 字段匹配规则:每个关键词只要能匹配产品的title/info/seller任意一个字段,就算该关键词匹配成功。

优化建议(可选)

如果需要忽略大小写匹配,让football OTHER也能正常匹配,可将字段和关键词统一转小写:

return product.title.toLowerCase().contains(keyword.toLowerCase()) ||
       product.info.toLowerCase().contains(keyword.toLowerCase()) ||
       product.seller.toLowerCase().contains(keyword.toLowerCase());

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 21:39:36