如何实现单个字符串多关键词的列表过滤功能?
多关键词列表过滤实现方案
问题原因
当前过滤逻辑是检查产品字段是否包含完整输入字符串,当输入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(); }
逻辑说明
- 拆分关键词:用
split(' ')将输入字符串按空格拆分,再过滤掉空字符串,避免多空格导致无效匹配。 - 全关键词匹配:通过
keywords.every(...)确保产品必须满足所有关键词的匹配条件。 - 字段匹配规则:每个关键词只要能匹配产品的
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
相关产品推荐
相关产品推荐

