mysql - MYSQL FULLTEXT 搜索多个关键字
问题描述
我已经调用keywords
了字段,并且存储的信息是一个用关键字分隔的关键字|
例如:
sky|Banana is good|apple|apple is red|sky is blue|green
我正在尝试做的是在该字段中搜索并找到包含至少一个关键字的结果。
为此,我在布尔模式中使用了 MATCH AGAINST
SELECT * FROM mytable
WHERE MATCH(kewords)
AGAINST ('+sky is blue +Banana is good +otherword' IN BOOLEAN MODE)
但是结果出错了,例如它会选择包含+sky is blue
一个单词的结果sky
我知道如何在 PHP 中解决这个问题,但我正在寻找 MYSQL 解决方案,我认为 Match AGAINST 是我正在寻找的。
解决方案
一种方法是使用LIKE
,用分隔符围住搜索词:
SELECT * FROM mytable
WHERE CONCAT('|', keywords, '|') LIKE '%|sky is blue|%' OR
CONCAT('|', keywords, '|')LIKE '%|Banana is good|%' OR
CONCAT('|', keywords, '|') LIKE '%|otherword|%'
这确保了搜索短语必须完全匹配(即sky is blue
不匹配sky
)。
如果您希望所有短语都存在(而不是任何短语),只需将 更改OR
为AND
.
推荐阅读
- apache-spark - 生产中 Spark 的系统要求
- django - Pyredis 无法连接到 Digital Ocean 托管的 Redis(连接丢失 ConnectionError 异常)
- node.js - 从 url 上传图片到 s3
- python-3.x - 如何删除列表中的重复元素
- reactjs - 反应中使用useCallback的无效钩子调用
- vba - MS Word 中的 VBA 分页符
- node.js - 如何检查我的角度项目中是否存在 node_modules 文件夹
- dialogflow-es - 默认后备意图响应 + webhook 实现
- terminal - "~/miniconda3/bin" 不会在自定义环境的 PATH 之前添加
- r - 有效地将每一行与整个数据表相乘以实现大数据量